Montycat MCP - Shared Memory for AI Agents
OCI · DOCKER.IO/MONTYGOVERNANCE/MONTYCAT-MCP:1.1.5 · 2 COMPONENTS · SCANNED SEP 21
Shared, persistent memory for AI agents, with semantic recall and live updates.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security0
- Malware scan not yet available for this package.Unverified
- Known CVEs could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
- Install-script risk not yet assessed.Unverified
- Dependency health could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 1 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability64
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4669 tokens (~194/item across 24 items; 24 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage67
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 0% of tool parameters carry a description.Fail
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 3 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 25 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 2 categories
Categories scored 0 because we could not verify them: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
How do I install the Montycat MCP - Shared Memory for AI Agents server?
Montycat MCP - Shared Memory for AI Agents runs locally as a container image, launched with docker run --rm -i docker.io/montygovernance/montycat-mcp:1.1.5. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.
oci · docker.io/montygovernance/montycat-mcp:1.1.5
claude mcp add montygovernance-montycat-mcp -- docker run --rm -i docker.io/montygovernance/montycat-mcp:1.1.5
{
"mcpServers": {
"montygovernance-montycat-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"docker.io/montygovernance/montycat-mcp:1.1.5"
]
}
}
} {
"servers": {
"montygovernance-montycat-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"docker.io/montygovernance/montycat-mcp:1.1.5"
]
}
}
} codex mcp add montygovernance-montycat-mcp -- docker run --rm -i docker.io/montygovernance/montycat-mcp:1.1.5
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"montygovernance-montycat-mcp": {
"type": "local",
"command": [
"docker",
"run",
"--rm",
"-i",
"docker.io/montygovernance/montycat-mcp:1.1.5"
],
"enabled": true
}
}
} mcp_servers:
montygovernance-montycat-mcp:
command: "docker"
args: ["run", "--rm", "-i", "docker.io/montygovernance/montycat-mcp:1.1.5"] {
"McpServers": {
"montygovernance-montycat-mcp": {
"Transport": "stdio",
"Command": "docker",
"Arguments": [
"run",
"--rm",
"-i",
"docker.io/montygovernance/montycat-mcp:1.1.5"
]
}
}
} {
"mcpServers": {
"montygovernance-montycat-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"docker.io/montygovernance/montycat-mcp:1.1.5"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 19 Sept 26 36
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 21 Sept 2026 · Analysed oci/docker.io/montygovernance/montycat-mcp:1.1.5
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | oci |
| Reason | Verification failed |
| Discovered via | OCI referrers API |
Background: How many MCP packages publish verified provenance →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
montycat_await_memory_change Wait for Memory Change ~406
Wait until memory CHANGES — returns the moment another agent or session writes, updates, or deletes something in this memory. This is a live subscription to the database, not a poll: it sleeps until a change actually happens and then returns immediately. Use it to coordinate with other agents sharing a scope ("tell me when someone adds to our shared memory"), or to confirm a write from another session landed. Do NOT call it in a tight loop as a substitute for searching — to *find* things, use montycat_semantic_search. Returns `{changes: [...], next_seq, oldest_seq, cursor_expired, timed_out}`. Each change is `{seq, key, event, value}` where event is "inserted" (covers create and update) or "removed". Pass the returned `next_seq` back as `since_seq` on the next call to resume exactly where you left off. If the bounded buffer has discarded part of that history, `cursor_expired` is true and `oldest_seq` identifies the earliest retained record. Args: scope: Owner/user id whose memory to watch (keyspace mem_<scope>). Use "shared" for the common keyspace — the usual choice when coordinating between agents. keyspace: Explicit keyspace override (advanced; bypasses scope). timeout_sec: How long to wait before giving up (default 30). On timeout the result is empty with `timed_out: true` — that is a normal outcome, not an error. since_seq: Resume cursor from a previous call. Omit on the first call to watch only for changes from now on.
| Name | Type | Req | Description |
|---|---|---|---|
| keyspace | – | – | – |
| scope | – | – | – |
| since_seq | – | – | – |
| timeout_sec | integer | – | – |
No output schema declared.
No examples provided.
montycat_clean_snapshots Delete Memory Snapshots ~84
Delete snapshot files for one existing in-memory keyspace. This is destructive to the keyspace's snapshot history but does not delete its currently loaded in-memory records. Montycat performs the final authorization check. Args: keyspace: Explicit in-memory keyspace whose snapshots are cleaned.
| Name | Type | Req | Description |
|---|---|---|---|
| keyspace | string | yes | – |
No output schema declared.
No examples provided.
montycat_create_keyspace Create Memory Keyspace ~287
Create a new memory namespace using the configured owner's authority. A delegated owner can create a keyspace when its governance policy grants `provision-keyspace` for the requested store, storage type, and semantic model, but its store must already exist. With superowner credentials, the engine creates a missing configured store and this first keyspace together in the same provisioning request. The engine remains the final authorization boundary. Args: keyspace: Name of the keyspace to create. storage: Preferred storage type: "persistent" or "inmemory". Defaults to "persistent". semantic: Enable semantic search for this keyspace after creation. semantic_model: Optional embedding model: "minilm", "bge-small", "bge-base", or "e5-small". Supplying a model implies semantic=True. persistent: Deprecated compatibility option. True maps to storage="persistent"; False maps to storage="inmemory". cache: Optional cache size in MB (persistent only; min/default 10). compression: Enable compression (persistent only).
| Name | Type | Req | Description |
|---|---|---|---|
| cache | – | – | – |
| compression | boolean | – | – |
| keyspace | string | yes | – |
| persistent | – | – | – |
| semantic | boolean | – | – |
| semantic_model | – | – | – |
| storage | – | – | – |
No output schema declared.
No examples provided.
montycat_disable_semantic Disable Semantic Search ~135
Disable semantic search for one explicit keyspace. Stored vectors are retained by default so re-enabling can resume without a full rebuild. Set `drop_vectors` only when intentionally clearing vectors, such as before changing embedding models. The engine enforces all governance authority and explicit denials. Args: keyspace: Explicit keyspace to unenroll. store: Target store. Defaults to the configured store. drop_vectors: Also delete stored vectors for this keyspace.
| Name | Type | Req | Description |
|---|---|---|---|
| drop_vectors | boolean | – | – |
| keyspace | string | yes | – |
| store | – | – | – |
No output schema declared.
No examples provided.
montycat_enable_external_vectors Enable External Vectors ~56
Enroll a keyspace for caller-supplied embeddings instead of text embedding.
| Name | Type | Req | Description |
|---|---|---|---|
| dimensions | integer | yes | – |
| embedding_space | string | yes | – |
| keyspace | string | yes | – |
| store | – | – | – |
No output schema declared.
No examples provided.
montycat_enable_semantic Enable Semantic Search ~170
Enable semantic search for one explicit keyspace. The engine enforces `manage-semantic`, creator authority, explicit denials, and allowed-model constraints. Existing records are backfilled by the engine. This tool never enables semantic search database-wide. Args: keyspace: Explicit keyspace to enroll and backfill. store: Target store. Defaults to the configured store. semantic_model: Optional model: "minilm", "bge-small", "bge-base", or "e5-small". Omit to use the engine/policy default. field: Optional JSON field to embed instead of the whole stored value.
| Name | Type | Req | Description |
|---|---|---|---|
| field | – | – | – |
| keyspace | string | yes | – |
| semantic_model | – | – | – |
| store | – | – | – |
No output schema declared.
No examples provided.
montycat_forget Delete Memory ~114
Delete a stored record from memory by key or custom key. Args: keyspace: Memory namespace (defaults to the configured one). key: Montycat-generated key to delete. custom_key: Custom key to delete. wait_for_index: For persistent keyspaces, wait for secondary indexes before returning. Defaults to the engine setting.
| Name | Type | Req | Description |
|---|---|---|---|
| custom_key | – | – | – |
| key | – | – | – |
| keyspace | – | – | – |
| scope | – | – | – |
| wait_for_index | – | – | – |
No output schema declared.
No examples provided.
montycat_install_engine Install Montycat Engine ~190
Install the Montycat engine on THIS computer, then start it. Call this only when memory tools report that no engine is running and the user has agreed to install one. Tell them what it does first: it downloads the Montycat Semantic package (~18 MB) and opens your operating system's installer, which asks for an administrator password. On Linux it runs the documented APT installation with `sudo`. Refuses when MONTYCAT_URI is set or the configured host is not this machine — Montycat MCP is pointed at an engine elsewhere, and installing a local one would create a second database and write memories where nobody is looking. Does nothing if an engine is already reachable. Not needed when Docker is available: engine startup falls back to a container automatically, with no prompt.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
montycat_list_enforced_schemas List Enforced Schemas ~150
List schemas enforced on a keyspace, including field data types. Use this before a structured write or retrieval when the target keyspace's required fields or types are unknown. For retrieval, it helps construct correctly typed field filters. This inspection is read-only and never creates a missing keyspace. Args: keyspace: Explicit keyspace name. Takes precedence over scope. scope: Owner/user memory scope (maps to its configured keyspace). Use "shared" for the common keyspace. When both inputs are omitted, the configured default keyspace is inspected.
| Name | Type | Req | Description |
|---|---|---|---|
| keyspace | – | – | – |
| scope | – | – | – |
No output schema declared.
No examples provided.
montycat_list_keyspaces List Memory Keyspaces ~27
List the available memory stores and keyspaces on this Montycat engine.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
montycat_list_memories List Memories ~209
Browse stored memories — enumerate what is remembered, not search by meaning. Returns up to `limit` records with their keys. Use this to review or list memory; for meaning-based recall use montycat_semantic_search, and for exact lookups use montycat_recall. Args: keyspace: Memory namespace (defaults to the configured one). limit: Max records to return (default 25). recent: Return the most recently written records first (default True). Persistent keyspaces order by key, which is a strict write order; in-memory keyspaces have no ordered read, so there the bias stays approximate (by storage volume) and falls back to a full scan when the latest volume is empty. Pass False to read from the oldest record forward.
| Name | Type | Req | Description |
|---|---|---|---|
| keyspace | – | – | – |
| limit | integer | – | – |
| recent | boolean | – | – |
| scope | – | – | – |
No output schema declared.
No examples provided.
montycat_policy_explain Explain Policy Decision ~214
Explain whether the configured owner may perform a proposed action. This is a read-only policy check for planning and diagnostics; executing the action still requires a separate tool call and fresh engine authorization. The explanation identifies applicable grants, denials, creator authority, and storage/model constraints. Args: capability: One of "provision-keyspace", "remove-keyspace", "manage-snapshots", "manage-semantic", "manage-schema", or "manage-access". store: Target store. Defaults to the configured store. keyspace: Optional target keyspace. storage: Optional keyspace type: "persistent", "inmemory", or "distributed". semantic_model: Optional model constraint: "minilm", "bge-small", "bge-base", or "e5-small".
| Name | Type | Req | Description |
|---|---|---|---|
| capability | string | yes | – |
| keyspace | – | – | – |
| semantic_model | – | – | – |
| storage | – | – | – |
| store | – | – | – |
No output schema declared.
No examples provided.
montycat_policy_history View Policy History ~102
View governance history visible to the configured owner. This is read-only and owner-scoped by the authenticated Montycat credential. It can show when authority was delegated, denied, revoked, or transferred without allowing the MCP caller to select another owner. Args: store: Optional store filter. Defaults to the configured store. keyspace: Optional keyspace filter.
| Name | Type | Req | Description |
|---|---|---|---|
| keyspace | – | – | – |
| store | – | – | – |
No output schema declared.
No examples provided.
montycat_policy_view View Memory Policy ~108
View the configured owner's effective Montycat governance policy. This is read-only. It reports the authenticated owner's effective grants, denials, accessible and owned keyspaces, automatic creator capabilities, provisioning constraints, and policy health. The engine filters the result and remains the authorization boundary. Args: store: Optional store to inspect. Defaults to the store configured by MONTYCAT_URI or MONTYCAT_STORE.
| Name | Type | Req | Description |
|---|---|---|---|
| store | – | – | – |
No output schema declared.
No examples provided.
montycat_recall Recall Memories ~187
Recall memory by exact key or by field filter (not by meaning). Provide `key`/`custom_key` to fetch a single record, or `filters` (a map of field -> value) to look up all records matching those fields. For meaning-based recall use montycat_semantic_search instead. Args: keyspace: Memory namespace (defaults to the configured one). key: Montycat-generated key to fetch. custom_key: Custom key to fetch. filters: Field equality filters, e.g. {"user": "alice", "topic": "billing"}. limit: Max results for a filter lookup (default 25).
| Name | Type | Req | Description |
|---|---|---|---|
| custom_key | – | – | – |
| filters | – | – | – |
| key | – | – | – |
| keyspace | – | – | – |
| limit | integer | – | – |
| scope | – | – | – |
No output schema declared.
No examples provided.
montycat_reembed_semantic Rebuild Semantic Vectors ~85
Replace an enrolled keyspace's text embedding model and backfill it. This clears its current vectors, then has the engine rebuild them. Use `montycat_semantic_status` to observe the resulting configuration.
| Name | Type | Req | Description |
|---|---|---|---|
| field | – | – | – |
| keyspace | string | yes | – |
| semantic_model | string | yes | – |
| store | – | – | – |
No output schema declared.
No examples provided.
montycat_remember Store Memory ~393
Store a fact or record in memory; it is embedded and indexed automatically. Later recall it by meaning with montycat_semantic_search, or by key with montycat_recall. Returns the generated key in `payload`. Every record is auto-stamped with an indexed `_created_at` (UTC ISO-8601) unless the value already carries one — this powers time-range recall (`since`/`until` on montycat_semantic_search). Top-level fields are indexed, so they can be used as `filters` in hybrid search (e.g. store `{"project": "x", ...}`, later filter on it). Args: value: The record to store (a JSON object). scope: Owner/user id to store under (that owner's private memory, keyspace mem_<scope>). Use "shared" for the common keyspace. keyspace: Explicit keyspace override (advanced; bypasses scope). custom_key: Optional stable key to store under (for later exact recall/update). timestamp: Index a `_created_at` for time-range recall. Defaults to MONTYCAT_AUTO_TIMESTAMP (on). Pass False to skip the server-side timestamp parse when this memory will never be recalled by time. wait_for_index: For persistent keyspaces, wait until secondary indexes have caught up before returning. Defaults to the engine setting; use True when an immediate filtered/semantic recall must see this write. vector: Optional precomputed embedding for this record. It must match the keyspace's enrolled embedding profile.
| Name | Type | Req | Description |
|---|---|---|---|
| custom_key | – | – | – |
| keyspace | – | – | – |
| scope | – | – | – |
| timestamp | – | – | – |
| value | object | yes | – |
| vector | – | – | – |
| wait_for_index | – | – | – |
No output schema declared.
No examples provided.
montycat_remember_bulk Store Multiple Memories ~172
Store many memories at once; all are embedded and indexed automatically. Args: values: A list of records (JSON objects) to store. keyspace: Memory namespace (defaults to the configured one). timestamp: Index a `_created_at` on each record for time-range recall. Defaults to MONTYCAT_AUTO_TIMESTAMP (on). Pass False for large imports that will never be recalled by time — it skips a server-side timestamp parse per record. wait_for_index: For persistent keyspaces, wait for secondary indexes before returning. Defaults to the engine setting.
| Name | Type | Req | Description |
|---|---|---|---|
| keyspace | – | – | – |
| scope | – | – | – |
| timestamp | – | – | – |
| values | array | yes | – |
| vectors | – | – | – |
| wait_for_index | – | – | – |
No output schema declared.
No examples provided.
montycat_remove_keyspace Delete Memory Keyspace ~146
Permanently remove a memory namespace using the owner's authority. This is a destructive lifecycle operation. Before removal Montycat MCP closes the keyspace's live watch and releases MCP resource-subscription ownership so the engine cannot deadlock on a lingering subscriber. The engine then enforces `remove-keyspace`, creator authority, and explicit denials. Args: scope: Owner/user scope to remove (maps to keyspace mem_<scope>). Use "shared" for the configured shared keyspace. keyspace: Explicit keyspace override (advanced; bypasses scope).
| Name | Type | Req | Description |
|---|---|---|---|
| keyspace | – | – | – |
| scope | – | – | – |
No output schema declared.
No examples provided.
montycat_semantic_search Search Memories ~762
Search stored memory by MEANING, by KEYWORD, or both. Use this to recall relevant facts, documents, or past context for RAG and agent memory. Returns the top matches ranked by relevance, each with its key, a score, and the stored value. Ranking modes (`mode`): - "semantic" (default) — vector similarity. Finds a memory whose wording differs from the query. Scores are cosine similarity in [-1, 1]. - "keyword" — BM25 over the stored text. Use it when the query contains an exact term that must appear: an identifier, error code, or file name. BM25 scores are unbounded and comparable only within one query. - "hybrid" — runs both and fuses them with reciprocal rank fusion. The safest default when a query mixes meaning with an exact term. Scores are normalized to [0, 1]. Keyword and hybrid need a Montycat Semantic engine >= 1.3.4; older engines reject the request rather than silently returning semantic-only results. Narrowing is separate from ranking: `filters`, `since`, and `until` restrict WHICH memories are ranked — a hard AND over indexed fields — and never change the order within that set. Combine them freely: "what did we decide about the index" + `since` yesterday + `filters={"project": "montycat"}` is one call. A filter matching nothing returns []. Args: query: Natural-language description of what to recall. May be empty when `vector` supplies a precomputed query embedding. mode: Ranking strategy — "semantic", "keyword", or "hybrid". vector: Optional precomputed query embedding, for the vector half of "semantic" and "hybrid". It must match the keyspace's enrolled embedding space and dimensions; when set, the engine does not embed `query`. scope: Owner/user id to scope recall to (searches only that owner's memory, keyspace mem_<scope>). Use "shared"…
| Name | Type | Req | Description |
|---|---|---|---|
| filters | – | – | – |
| keyspace | – | – | – |
| limit | integer | – | – |
| min_score | – | – | – |
| mode | string | – | – |
| query | string | – | – |
| scope | – | – | – |
| since | – | – | – |
| timestamp_field | string | – | – |
| until | – | – | – |
| vector | – | – | – |
No output schema declared.
No examples provided.
montycat_semantic_status View Semantic Search Status ~71
Read the engine's actual semantic configuration and backfill state. Pass both `store` and `keyspace` for one keyspace. Omitting both asks for the database-wide view, which may require superowner authority.
| Name | Type | Req | Description |
|---|---|---|---|
| keyspace | – | – | – |
| store | – | – | – |
No output schema declared.
No examples provided.
montycat_start_snapshots Start Memory Snapshots ~116
Start scheduled snapshots for one existing in-memory keyspace. Montycat enforces `manage-snapshots`, creator authority, and explicit denials. If the response says "Snapshot rate is not set", snapshot scheduling is not configured on the engine; that is an environmental configuration error, not an authorization denial. This tool cannot alter the global snapshot rate. Args: keyspace: Explicit in-memory keyspace to snapshot.
| Name | Type | Req | Description |
|---|---|---|---|
| keyspace | string | yes | – |
No output schema declared.
No examples provided.
montycat_stop_snapshots Stop Memory Snapshots ~67
Stop scheduled snapshots for one existing in-memory keyspace. Existing snapshot files are retained. Montycat performs the final authorization check. Args: keyspace: Explicit in-memory keyspace whose snapshot schedule stops.
| Name | Type | Req | Description |
|---|---|---|---|
| keyspace | string | yes | – |
No output schema declared.
No examples provided.
montycat_update Update Memory ~202
Revise an existing memory in place (memory is mutable). Use this when a stored fact changes — a corrected value, an updated preference — instead of storing a duplicate. Only the fields you pass are changed. Identify the record by `key` or `custom_key`. Args: updates: Fields to change, e.g. {"status": "resolved"} or {"name": "Alice"}. keyspace: Memory namespace (defaults to the configured one). key: Montycat-generated key of the record to update. custom_key: Custom key of the record to update. wait_for_index: For persistent keyspaces, wait for secondary indexes before returning. Defaults to the engine setting.
| Name | Type | Req | Description |
|---|---|---|---|
| custom_key | – | – | – |
| key | – | – | – |
| keyspace | – | – | – |
| scope | – | – | – |
| updates | object | yes | – |
| vector | – | – | – |
| wait_for_index | – | – | – |
No output schema declared.
No examples provided.
What is the Montycat MCP - Shared Memory for AI Agents server?
Montycat MCP - Shared Memory for AI Agents is listed in the public MCP registry as io.github.MontyGovernance/montycat-mcp. Shared, persistent memory for AI agents, with semantic recall and live updates. This page covers its container image (docker.io/montygovernance/montycat-mcp:1.1.5).
Is the Montycat MCP - Shared Memory for AI Agents server safe to use?
Montycat MCP - Shared Memory for AI Agents scores 36 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Montycat MCP - Shared Memory for AI Agents server expose?
Montycat MCP - Shared Memory for AI Agents exposes 24 tools: montycat_semantic_search, montycat_remember, montycat_recall, montycat_install_engine, montycat_list_keyspaces, and 19 more. Their descriptions and schemas cost roughly 4,453 tokens of context every time the server is loaded.
Is the Montycat MCP - Shared Memory for AI Agents server still maintained?
Montycat MCP - Shared Memory for AI Agents is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Montycat MCP - Shared Memory for AI Agents server under?
Montycat MCP - Shared Memory for AI Agents declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.