valta-mcp
The valta-mcp server provides a Model Context Protocol (MCP) interface for Valta's financial governance platform, enabling AI agents to manage wallets, control spend, enforce limits, and route real API calls through a spend-gated egress proxy.
Wallet & Balance Management
Check an agent's current balance and spend limits
Create new wallets with optional daily, monthly, and per-transaction USDC limits
List all wallets on the account with balances and configured limits
Transfer USDC between agent wallets
Spend Authorization & Control
Request spend authorization through Valta's spend gate (returns approval with new balance or denial with reason)
Freeze/unfreeze an agent's wallet as an immediate kill switch
Policy Management
List all spending policies, optionally filtered to one agent
Set named policies with daily and/or per-transaction USDC caps
Audit Trail
Read a tamper-evident, hash-chained log of all spend decisions (approved and denied) for one or all agents
Agent Management
List all agents on the account, or get details for a specific agent
Trigger an agent to run a task and poll the status/result of that run
Spend-Gated Egress Proxy
Route real outbound API calls to connected services (currently Stripe, Serper, Polygon) through Valta's proxy — the declared cost is checked against wallet limits before the real provider is contacted; blocked calls never reach the provider and failed calls are automatically refunded
Review receipts for every proxied call (allowed, blocked, refunded, or pending) and the reason why
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@valta-mcpAuthorize $50 for OpenAI API usage"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
valta-mcp
An MCP (Model Context Protocol) server for Valta — financial governance for AI agents. Exposes Valta's spend gate and audit trail as MCP tools, so any MCP-compatible client (Claude Desktop, Claude Code, Cursor, and others) can call them directly.

What this is — and isn't
This server is a thin wrapper over Valta's real, hosted REST API. It does not implement any spend logic, limits, or hashing itself — every tool call here is a pass-through to https://valta.co/api/v1/..., where the actual enforcement (spend gate, audit chain) happens. This repo is the protocol adapter, not the enforcement engine.
Important, read before relying on this for anything security-sensitive: most of these tools are advisory, not enforcing. A tool description telling a model "call this before spending" is guidance, not a guarantee. valta_request_spend, for example, only governs spend that routes through it — it does not intercept or prevent spending that happens through some other tool, API, or webhook the agent has independent access to.
One tool is different: valta_proxy_request. Instead of asking the model to check in before spending elsewhere, this one is the spend — the agent declares an outbound call's cost and routes the actual call through Valta, which checks it against wallet limits and only makes the real request (using your own stored credential) if approved. If it's blocked, the real provider is never contacted at all. This is a genuine, code-level guarantee, not an honor system — but only for the specific services Valta has wired up for proxying (currently: Stripe, Serper, Polygon). Any spend that happens through a channel other than this proxy — the agent's own separate API key, a webhook, a tool this server doesn't know about — is outside what any of these tools can see or stop. See Design notes below.
Related MCP server: Payments Agent Gateway (MCP)
Install
npm install -g valta-mcpOr run directly without installing:
npx valta-mcpConfiguration
Get an API key at valta.co/dashboard → Settings → API Keys → Create key.
Add to your MCP client's config (e.g. Claude Desktop's claude_desktop_config.json):
{
"mcpServers": {
"valta": {
"command": "npx",
"args": ["valta-mcp"],
"env": {
"VALTA_API_KEY": "sk_valta_your_key_here"
}
}
}
}Tools
Tool | What it does |
| Read an agent's wallet balance and limits |
| Request authorization for a spend — approved or denied by the real spend gate |
| Create a new named wallet with optional spend limits |
| Kill switch — freeze an agent's wallet, blocking further spend |
| Resume a frozen agent's wallet |
| Read the hash-chained audit trail of spend decisions |
| List all named wallets on the account — use this to discover wallet names before checking balance/spending |
| Transfer USDC directly between two of your agent wallets |
| List all agents on the account |
| Get details for a single agent |
| Trigger an agent to run a task |
| Check the status/result of a specific agent run |
| List spending policies configured on the account |
| Create a new spending policy (daily cap, per-transaction cap) |
| Make a real outbound call to a connected service (Stripe, Serper, Polygon) through Valta's spend-gated egress proxy — declares a cost up front, only reaches the real provider if approved, refunds automatically on failure |
| List the receipts for every call the egress proxy has handled — allowed, blocked, refunded, or pending approval, and why |
Every tool's description in src/index.ts states plainly what it enforces and what it doesn't — read those before wiring this into anything that touches real money.
Design notes
Why there's no "non-bypassable system prompt." An earlier draft of this project considered shipping a system-prompt instruction block claiming to make spend gating "non-bypassable." That claim doesn't hold up, for two reasons:
MCP servers don't control the host's system prompt. Claude Desktop, Claude Code, Cursor, and other hosts each own their own system prompt. An MCP server provides tools and, in some cases, a limited
instructionsfield — it cannot inject a binding, universally-enforced rule into the conversation.A system prompt is a request to the model, not a code-level constraint. Even where a host does surface server instructions, an agent can still be prompt-injected, jailbroken, or simply routed through a different tool entirely that doesn't call this server at all. Claiming otherwise would be exactly the kind of gap this project exists to close — trusting the model to self-police is the failure mode Valta's spend gate was built to avoid in the first place.
What actually provides a guarantee, and what doesn't. There are now two different levels of enforcement in this server, and it matters which one a given tool gives you:
Spend authorized by calling
valta_request_spendis genuinely checked against real limits, server-side — but only if the agent chooses to call it first. The gap is spend that happens through some other channel the agent has access to.Spend routed through
valta_proxy_requestis checked before the real call is made at all — there's no step where the agent could skip the check and still have the payment go through, because the payment-triggering call and the check are the same action. That closes the gap described above, but only for the services this server has wired up for proxying (Stripe, Serper, Polygon as of this writing) — extending it to a new service means adding real credential-handling logic for that provider's specific auth scheme, not flipping a config flag.
If a use case needs a hard guarantee for a service not yet listed above, that service needs to be added to Valta's proxy gate first — open an issue or a PR.
License
MIT.
Available Tools
16 toolsvalta_check_balanceA
Check an agent's Valta wallet balance and spend limits. Call this before attempting a spend to confirm funds are available. This does not spend anything.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | The Valta agent/wallet ID or name to check |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly states the tool is read-only ('does not spend anything'), which is the key behavioral trait. It does not elaborate on return format or rate limits, but for a simple balance check this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, no wasted words, and uses front-loaded structure: verb first ('Check'), then resource, then guidance. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only check with one parameter and no output schema, the description covers purpose, usage, and side-effect transparency. It is complete enough; missing details on exact return values are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear parameter description for agentId. The tool description adds no additional meaning beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks an agent's wallet balance and spend limits, using a specific verb ('Check') and resource ('agent's Valta wallet balance and spend limits'). It distinguishes itself from spend-related siblings by explicitly stating 'This does not spend anything.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises to call this before attempting a spend to confirm funds, providing clear usage context. It does not explicitly exclude alternatives like valta_request_spend, but the guidance is strong enough for an agent to infer when to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valta_create_walletA
Create a new named Valta wallet with optional spend limits. Use this to set up governance for a new agent before it starts spending.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | A unique name for this wallet, e.g. the agent's name | |
| dailyLimit | No | Max USDC per day | |
| perTxLimit | No | Max USDC per single transaction | |
| monthlyLimit | No | Max USDC per month |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so desc carries burden. Indicates mutation ('create') but does not specify authorization, uniqueness constraints, or side effects. Adequate but could be more transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose. Every word adds value. No waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a creation tool with 4 well-described params and clear usage context, it is largely complete. Missing output schema details, but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions. Description adds 'optional spend limits' grouping but does not significantly augment parameter meaning beyond schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Create a new named Valta wallet' with specific verb and resource. Distinguishes from siblings like valta_list_wallets by focusing on creation and governance setup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'set up governance for a new agent before it starts spending.' Does not mention explicit alternatives or when not to use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valta_freeze_agentA
Immediately freeze an agent's Valta wallet, blocking all further spend through Valta. Use this as a kill switch when an agent is behaving unexpectedly.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | The Valta agent/wallet ID or name to freeze |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes immediate freeze and blocking of spend, but no annotations exist. Does not mention reversibility (though sibling unfreeze exists) or permissions needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise, front-loaded sentences with no fluff. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple one-parameter tool; covers purpose and usage. Lacks details on side effects or return behavior, but acceptable given no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; the description restates the schema description for agentId, adding no new meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action: freeze an agent's Valta wallet, blocking all spend. Differentiates from sibling valta_unfreeze_agent and other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this as a kill switch when an agent is behaving unexpectedly,' providing clear use case. Lacks explicit when-not-to-use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valta_get_agentB
Get details for a single agent, including status and balance.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | The agent ID to look up |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It only states what the tool returns, not that it is a read-only operation (implied but not explicit). It does not disclose side effects, authentication requirements, or rate limits, which are important for mutation-less tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (10 words) and front-loaded with the action. However, it omits some useful context that could be added in a few more words without sacrificing conciseness, such as clarifying it is a read-only lookup.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool with no output schema, the description gives a reasonable summary ('including status and balance') but does not fully describe the return structure, error cases, or mention that it is a read operation. It is adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (the only parameter 'agentId' has a description). The tool's description adds minimal value beyond the schema, only mentioning 'including status and balance' which relates to output, not parameters. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get details') and resource ('single agent'), and specifies included content ('status and balance'). It implicitly differentiates from sibling 'valta_list_agents' by targeting a single agent rather than a list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving a single agent's details but provides no explicit guidance on when to use this tool versus alternatives like 'valta_get_agent_run' or 'valta_check_balance'. No prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valta_get_agent_runB
Check the status and result of a specific agent run.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | Yes | The run ID to check | |
| agentId | Yes | The agent ID the run belongs to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states 'check', implying read-only, but does not confirm safety, permission requirements, or any side effects. This is insufficient for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that immediately conveys the tool's purpose. No wasted words, and the core information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple check tool with two well-described parameters, the description is adequate but lacks information about the return format or structure. Since there is no output schema, the description should clarify what 'status and result' means, which it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add any meaning beyond the schema's parameter descriptions, which are already clear (runId, agentId).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('check') and the resource ('status and result of a specific agent run'). It is specific and distinct from sibling tools like 'run_agent' or 'get_agent', but does not explicitly differentiate itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, such as when to check a run after invoking it, or when not to use it. The description lacks contextual usage hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valta_get_audit_trailA
Read the tamper-evident, hash-chained audit trail of spend decisions (approved and denied) for an agent, or across all agents if no agentId is given.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entries to return, default 20 | |
| agentId | No | Optional — filter to a single agent's audit trail |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description bears full burden. It correctly indicates a read-only operation ('Read') and mentions the tamper-evident nature. However, it does not disclose pagination behavior, ordering, or response format beyond what is implied. With no annotations, a 4 is appropriate given the safe read action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, efficiently front-loading the action and key characteristics. No unnecessary words, every part adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 optional params, no output schema), the description fully covers what the tool does, its scope, and the optional filter. It is contextually complete for an AI agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds value by clarifying that omitting agentId returns the global trail, which goes beyond the schema's 'Optional — filter to a single agent's audit trail' formulation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Read) and the resource (tamper-evident, hash-chained audit trail of spend decisions). It uniquely distinguishes this tool from siblings like valta_request_spend or valta_check_balance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool: to read audit trail entries for a specific agent or all agents. It provides a clear alternative (omit agentId for global view) but does not explicitly exclude other scenarios or compare to sibling alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valta_list_agentsB
List all agents on this account — both marketplace subscriptions and custom SDK-created agents.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results, default 20 | |
| offset | No | Pagination offset, default 0 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It fails to mention pagination behavior, rate limits, or any side effects beyond a basic list operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence that efficiently conveys the tool's purpose without any extraneous information. Front-loaded with the action and scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with clear parameters and no output schema, the description is mostly complete. It could mention pagination or ordering, but the schema handles parameter details adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameters (limit, offset) are well-documented in the schema. The description adds no additional semantic value beyond what the schema already provides, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists all agents on the account and specifies the scope (both marketplace subscriptions and custom SDK-created agents), distinguishing it from sibling tools like valta_get_agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives such as valta_get_agent or other list tools. The context of sibling tools with similar listing capabilities requires explicit usage differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valta_list_policiesA
List spending policies (limits, approval thresholds) configured on this account, optionally filtered to one agent.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | No | Optional — filter to policies for a single agent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description carries full burden. Does not disclose that listing is a read-only operation with no side effects, or any authentication/permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no filler; purpose and optional filter stated concisely. Front-loaded with the verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one optional parameter and no output schema, the task is simple. Could mention that it returns a list of policies or that no filtering returns all policies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; the only parameter 'agentId' is described in input schema. Description adds 'optionally filtered to one agent' which rephrases the schema description without adding new semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'list' and resource 'spending policies' with clarifying parenthetical '(limits, approval thresholds)'. Distinguishes from sibling 'valta_set_policy' which is for creating, not listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions optional filtering to one agent, implying when to use that parameter. No explicit when-to-use or when-not-to-use guidance relative to siblings like valta_set_policy or valta_request_spend.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valta_list_proxy_requestsA
List the receipts for every call made through Valta's spend-gated egress proxy — what was allowed, blocked, refunded, or left pending approval, and why. Optionally filter to one agent.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results, default 20 | |
| agentId | No | Optional — filter to one agent's proxy requests |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the types of results (allowed, blocked, refunded, pending) and mentions why they occurred. However, it omits pagination behavior (though limit parameter exists) and does not state that the tool is read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that efficiently conveys the purpose and a key option. Every phrase adds value, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with two optional parameters and no output schema, the description explains the result content well but does not cover return format, ordering, or pagination. This is adequate but leaves gaps for an agent that might need details on how to handle large result sets.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters documented. The description adds context for agentId ('Optionally filter to one agent') but does not mention the limit parameter or its default/max behavior. Baseline 3 is appropriate as schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'List' and the resource 'receipts for every call made through Valta's spend-gated egress proxy', detailing what each receipt contains (allowed, blocked, refunded, pending). This distinguishes it from sibling tools like valta_list_agents or valta_list_wallets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for viewing proxy request history but lacks explicit guidance on when to use it versus alternatives, or any exclusions. The optional filter is noted but no context on prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valta_list_walletsA
List all named Valta wallets on this account, with balances and limits. Use this to discover what wallets exist before checking a balance or requesting a spend — you need to know the exact wallet name/ID first.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that the tool lists wallets with balances and limits, which is sufficient for a read-only list operation. No hidden behaviors are omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The first sentence states the purpose, and the second provides workflow context. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description fully explains what the tool returns (wallet names, balances, limits) and how it fits into the workflow (discovery before using check_balance or request_spend). Complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters in the schema, so the description does not need to add parameter info. The baseline for 0 parameters is 4, and the description appropriately focuses on the tool's output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all named Valta wallets with balances and limits. The verb 'list' and resource 'wallets' are specified, and it distinguishes from siblings like valta_check_balance and valta_create_wallet.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: to discover wallets before checking a balance or requesting a spend, and that you need the wallet name/ID. This implies when not to use (when you already know the ID) and provides clear context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valta_proxy_requestA
Make a real outbound API call to a connected service (e.g. Stripe) through Valta's spend-gated egress proxy, instead of calling the provider directly. Declare the amount this call will cost up front — Valta checks it against the agent's wallet limits (freeze state, per-transaction/daily/monthly caps, approval thresholds) and only makes the real request if approved, using the account's own stored credential for that service. If the upstream call fails, the declared amount is automatically refunded. Only services with proxying enabled can be called this way — currently: stripe, serper, polygon.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Optional JSON body to send with the request | |
| path | Yes | Path on the service's API, relative to its base URL, e.g. "/v1/customers" | |
| amount | Yes | Declared cost of this call in USD — checked against wallet limits before the real call is made | |
| method | Yes | HTTP method for the upstream call | |
| agentId | Yes | The Valta agent/wallet ID or name this spend is attributed to | |
| service | Yes | The connected service to call, e.g. "stripe" | |
| category | No | Optional spend category | |
| description | Yes | What this call is for — recorded in the audit trail |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: amount declaration, wallet limit checks, approval gate, credential usage, auto-refund on failure, and supported services. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph with multiple sentences, each adding value. It is appropriately sized and front-loaded. Could be more structured with bullet points, but currently concise and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters, 6 required, and no output schema, the description covers all necessary context: approval process, refund behavior, supported services, and parameter meanings. It is complete for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%. The description adds context beyond schema: e.g., 'amount' is declared cost, 'agentId' is wallet ID, 'description' is audit trail. It explains the approval flow, clarifying parameter roles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: making a real outbound API call via Valta's spend-gated proxy. It specifies the verb 'make', the resource 'outbound API call', and distinguishes from calling the provider directly. Example services are listed, aiding differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use (for proxied calls to connected services) and lists supported services. It implicitly indicates when not to use (unsupported services), but lacks explicit alternatives like direct calls. Clear context but no explicit when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valta_request_spendA
Request authorization to spend from an agent's Valta wallet. Returns approved with a new balance, or denied with a reason. IMPORTANT: this tool only governs spend that routes through it — it does not intercept or prevent spending done via other tools, APIs, or webhooks that don't call this tool first. If denied, do not proceed with the action and inform the user why.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount in USDC to spend | |
| agentId | Yes | The Valta agent/wallet ID or name making the spend | |
| category | No | Optional spend category | |
| description | Yes | What this spend is for — recorded in the audit trail |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description discloses the return states ('approved with a new balance, or denied with a reason') and a critical behavioral limitation: it does not intercept spending through other paths. This is good transparency, though it could mention additional side effects like pending transactions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four focused sentences with no waste. It front-loads the purpose and uses bold for the critical warning. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, no output schema, and no annotations, the description covers purpose, return values, and important usage constraints. It could specify the format of the denial reason or what 'new balance' refers to, but overall it's reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds no extra parameter semantics beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Request authorization to spend' and specifies the resource 'from an agent's Valta wallet'. It distinguishes from sibling tools like valta_transfer_funds and valta_check_balance by focusing on spend authorization.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly explains the tool's scope: 'only governs spend that routes through it' and gives clear guidance on what to do if denied: 'do not proceed with the action and inform the user why'. This helps the agent decide when to use it and how to handle results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valta_run_agentA
Trigger an agent to run a task. Returns the run's execution ID and initial status.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | The task instruction for the agent to execute | |
| agentId | Yes | The agent ID to run | |
| context | No | Optional additional context, max 2000 characters |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states return of execution ID and initial status, hinting at asynchronous behavior but not explicitly. It does not disclose side effects, auth requirements, or error conditions, leaving behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey the core action and return value. No filler or redundant information. Front-loaded with key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description covers return values (execution ID and status). However, it omits details on error handling, timeout, or how to retrieve detailed results. Adequate but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter having a basic description. The tool description adds no additional meaning beyond 'Trigger an agent to run a task.' No extra syntax or format guidance provided, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Trigger' and clearly identifies the resource 'agent' and action 'run a task'. It distinguishes from siblings by mentioning return of execution ID and initial status, which contrasts with retrieval tools like valta_get_agent_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for starting an agent task but provides no explicit when-to-use or when-not-to-use guidance. Given the sibling tools include retrieval and management functions, the usage is somewhat clear but lacks exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valta_set_policyB
Create a new spending policy — a named limit configuration (daily cap, per-transaction cap) that can be applied to an agent's spend.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | A name for this policy | |
| agentId | No | Optional — the agent this policy applies to | |
| maxSpendPerDay | No | Maximum USDC spend per day | |
| maxSpendPerTransaction | No | Maximum USDC per single transaction |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but does not disclose important behavioral traits: whether creation is idempotent, what happens on duplicate name, required permissions, side effects, or return value. The description only says 'create', omitting safety and confirmation details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that front-loads the core purpose. Every word contributes meaning; no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the essential purpose but lacks context around post-creation behavior (e.g., returns policy object or ID), error conditions, prerequisites (e.g., agent existence for optional agentId), and interaction with sibling tools like 'valta_apply_policy' if it exists. It is adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all 4 parameters (100% coverage), so baseline is 3. The description adds value by explaining that the policy is a 'named limit configuration' and that 'daily cap, per-transaction cap' map to the spend parameters, but does not add critical new info beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a new spending policy with daily and per-transaction caps, and mentions it applies to an agent's spend. It distinguishes from siblings like 'valta_list_policies' and 'valta_request_spend' implicitly, but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. For example, it does not mention checking existing policies with 'valta_list_policies' before creating, or prerequisites like having an agent if 'agentId' is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valta_transfer_fundsC
Transfer USDC directly between two of your agent wallets.
| Name | Required | Description | Default |
|---|---|---|---|
| amount | Yes | Amount in USDC to transfer | |
| toAgentId | Yes | Wallet ID or name receiving funds | |
| description | No | Optional description of the transfer | |
| fromAgentId | Yes | Wallet ID or name sending funds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of behavioral disclosure. It describes a direct transfer between agent wallets but does not mention any side effects, authorization requirements, or irreversibility. For a financial transfer tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, no wasted words. Front-loaded with the verb and purpose. Ideal conciseness for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (4 parameters, no output schema, no annotations), the description is incomplete. It does not explain return values (e.g., transaction ID), error handling, or constraints beyond the schema. A user needs more context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the individual parameter descriptions already exist. The description adds the context 'between two of your agent wallets,' which reinforces but does not significantly augment the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool transfers USDC between agent wallets, using a specific verb and resource. It distinguishes itself from siblings like valta_request_spend or valta_check_balance, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., valta_request_spend for spending, valta_check_balance for balance checks). The description does not mention prerequisites or context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
valta_unfreeze_agentA
Unfreeze a previously frozen agent's Valta wallet, allowing spend to resume.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes | The Valta agent/wallet ID or name to unfreeze |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose any behavioral traits such as required permissions, reversibility, side effects, or error conditions beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no wasted words. The verb is front-loaded, and the purpose is immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 1-parameter tool, the description is adequate but lacks context about success/failure outcomes and prerequisites (e.g., agent must be frozen). Output schema is missing, but the action is straightforward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already describes the parameter. The tool description adds no additional meaning beyond what is in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Unfreeze' and the resource 'agent's Valta wallet', with the outcome 'allowing spend to resume'. It directly contrasts with the sibling tool valta_freeze_agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use vs alternatives, though it is the inverse of freeze_agent. The description does not specify prerequisites (e.g., agent must be frozen) or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
16 tool updates
v0.1.4- First observed
valta_check_balance - First observed
valta_create_wallet - First observed
valta_freeze_agent - First observed
valta_get_agent - First observed
valta_get_agent_run - First observed
valta_get_audit_trail - First observed
valta_list_agents - First observed
valta_list_policies - First observed
valta_list_proxy_requests - First observed
valta_list_wallets - First observed
valta_proxy_request - First observed
valta_request_spend - First observed
valta_run_agent - First observed
valta_set_policy - First observed
valta_transfer_funds - First observed
valta_unfreeze_agent
TDQS
Scored across 16 tools
Each tool targets a distinct operation: wallet management, agent control, spend authorization, proxy requests, audit, etc. There is no noticeable overlap; even seemingly similar tools like check_balance and list_wallets serve different purposes.
Tools consistently use snake_case and start with 'valta_'. Most follow a verb_noun pattern (e.g., create_wallet, freeze_agent), though 'proxy_request' is noun_verb, which is a minor deviation. Overall, naming is clear and predictable.
With 16 tools, the server is slightly above the ideal 3-15 range, but the number is still reasonable given the domain's complexity. No tool feels superfluous, and the set covers essential operations without being bloated.
The tool surface covers core workflows: wallet lifecycle (create, list, balance, transfer), agent management (list, get, run, freeze/unfreeze), spending policies (list, set), spend authorization, proxy requests, and audit. Minor gaps exist (no update/delete for wallets or agents), but these are not critical for the primary purpose of spend governance.
Maintenance
Related MCP Connectors
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
MCP server connecting AI agents to non-custodial staking data across 130+ networks.
Hosted MCP server for AI agent identity, permissions, verification, and reusable proof.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enforces runtime governance on AI agent actions — file access, command execution, delegation chains, and permission escalation.MIT
- FlicenseNot gradedqualityBmaintenanceAn MCP server that enables AI agents to safely interact with a double-entry payments ledger, enforcing idempotency, policy-based access control, and human-in-the-loop approval for high-value actions.-
- AlicenseAqualityBmaintenanceAn MCP server that provides programmable spend limits and audit trails for AI agents to make payments from a dedicated wallet, preventing overspend and unauthorized transactions.8MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that enables AI agents to request human approval before spending money, check approval status, verify signed tokens, and manage API keys.13MIT