bounty-mcp
Supports paying per request in USDC on the Arc network, including reading the wallet's USDC balance and settling x402 payments via Arc mainnet.
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., "@bounty-mcppost a $50 bounty for a ground-level capture of 5th and Main"
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.
Vangrid MCP server
bounty-mcp is an MCP server that lets an agent buy anchored ground-level capture data from
Vangrid and commission new captures, paid per call in USDC. It is a thin, stateless client over
data.vangrid.io; the payment layer is x402 and the
agent pays from its own wallet. Docs: docs.vangrid.io/api/pay-per-request,
docs.vangrid.io/api/agent-bounties.
Install once, drop into any MCP client (Claude Desktop, Claude Code, Cursor), give it a wallet with a few USDC on Base or Arc. No account, no API key.
Tools
Tool | Cost | Purpose |
| free | is this sha256 an anchored Vangrid capture, and where |
| ~$0.01 | captures inside an area of interest and time window |
| ~$0.005 | one capture by its sha256 |
| the bounty amount | commission a capture; agent pays it upfront |
| free | status, submissions with watermarked previews, model links after accept |
| free | accept one submission; escrow released, reconstruction starts |
| free | cancel while open; USDC returned to the paying wallet |
Prices are quoted by the server on every request as a PAYMENT-REQUIRED header and can move.
The client never signs a payment above MAX_USD_PER_CALL for data or MAX_USD_PER_BOUNTY for a
bounty.
On the two data routes the wallet signs an EIP-3009 authorization before the request is validated, so a malformed request can produce a signature. Nothing is captured for one: x402 cancels settlement when the route answers 4xx. Bounty routes still validate before quoting.
Two tool calls are free but not harmless: vangrid_accept_submission releases the escrow and
vangrid_cancel_bounty ends the bounty, both irreversible and neither covered by the spend
caps, which only constrain signing. Gate them behind human approval for an unattended agent —
see SECURITY.md.
Related MCP server: valorem-mev-mcp
Setup
Three of the seven tools are paid — vangrid_coverage_query, vangrid_observation and
vangrid_post_bounty. They settle in USDC on Base or Arc from a wallet you point the server at.
This section walks through creating that wallet, funding it and confirming the server can talk
to the API.
Node 20 or newer. Nothing to install up front: the MCP host launches the server through npx
(see Configure the MCP client), which fetches the server straight
from GitHub on first run. Step 4 below is the check that it works.
To work from a checkout instead:
npm install
cp .env.example .env1. Create a spending wallet
Use a fresh, dedicated wallet. Not your treasury; not the wallet a human uses. The private key sits in a file the MCP host reads, and the agent will spend from it on its own.
Either use MetaMask (or any EVM wallet) and copy the private key out, or generate one from the command line:
node scripts/generate-wallet.mjsPrints the address and writes the private key to .vangrid-wallet with mode 0600 — it is
never printed, so it does not end up in shell scrollback or history. The file is git-ignored.
Append it to your .env (cat .vangrid-wallet >> .env), then delete it once the key is where
your MCP host reads it.
2. Configure .env
VANGRID_API_URL=https://data.vangrid.io
X402_NETWORK=auto # or eip155:8453 Base / eip155:5042 Arc
EVM_PRIVATE_KEY=0x<the key from step 1>
MAX_USD_PER_CALL=0.05 # hard cap per data call
MAX_USD_PER_BOUNTY=100 # hard cap per bounty.env is git-ignored. Only this process reads it; the key is never sent over the network.
3. Fund the wallet
Send USDC to the address from step 1, on Base or on Arc. With X402_NETWORK=auto the server
reads the wallet's USDC balance on both and pays where the money is; the balances are printed
on start ([vangrid-mcp] wallet USDC: Base 0 USDC, Arc 5 USDC).
Base: USDC at
0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913. Buy on a CEX and withdraw to Base, or bridge with bridge.base.org. No ETH is needed: x402 uses a signed USDC transfer authorization and the settlement service submits it.Arc: USDC is the chain's native asset behind the ERC-20 predeploy
0x3600000000000000000000000000000000000000. Bridge from Base with CCTP, or buy through a service that supports Arc. Gas on Arc is also USDC.
Start with $5 to try the flow, top up as the agent spends. vangrid_verify_provenance is
free, vangrid_observation is about $0.005, vangrid_coverage_query about $0.01. Bounties
cost the bounty amount, minimum $50.
4. Sanity check without spending
Run the server directly with the key blanked, to confirm it starts and reaches the API:
EVM_PRIVATE_KEY= npx -y github:vangrid-labs/bounty-mcp # or, from a checkout: node src/index.jsYou should see a single stderr line ending in wallet=none (free tools only). Ctrl-C.
5. First real call
Add the server to your MCP host (next section). Ask the agent:
Is
cf9642dae244a213bc9c0e6d325a84be44fe8fd1f57d9b362c64493769b74a48a Vangrid capture?
That is vangrid_verify_provenance, free, and it confirms end-to-end connectivity. Then:
Buy the observation for that sha256.
That is vangrid_observation, $0.005, and it confirms the wallet can pay. The reply carries
a payment.transaction hash you can open in the explorer for the chosen network.
Configure the MCP client
Claude Desktop (claude_desktop_config.json) or Cursor (.cursor/mcp.json):
{
"mcpServers": {
"vangrid": {
"command": "npx",
"args": ["-y", "github:vangrid-labs/bounty-mcp"],
"env": {
"VANGRID_API_URL": "https://data.vangrid.io",
"X402_NETWORK": "auto",
"EVM_PRIVATE_KEY": "0x...",
"MAX_USD_PER_CALL": "0.05",
"MAX_USD_PER_BOUNTY": "100"
}
}
}
}Claude Code:
claude mcp add vangrid -e EVM_PRIVATE_KEY=0x... -- npx -y github:vangrid-labs/bounty-mcpFrom a checkout, point the host at the file instead: node /absolute/path/to/bounty-mcp/src/index.js.
How the bounty flow works
vangrid_post_bounty signs the bounty amount and returns { bounty_id, agent_token }. The
token is stored on disk at ~/.vangrid-mcp/bounties.json with owner-only permissions, so the
other bounty tools only need the id. Vangrid posts the bounty to the board from its operator
wallet within a minute; a person films it (hours or days). Poll vangrid_bounty_status,
review the previews, then vangrid_accept_submission; the escrow is released on chain and the
reconstruction starts. Nothing worth accepting or a change of mind: vangrid_cancel_bounty or
let the deadline pass, USDC is refunded on the paying network.
Environment
See .env.example for the full list. The essentials:
VANGRID_API_URL— API base, defaults tohttps://data.vangrid.io.X402_NETWORK—auto(default): pay on whichever of Base and Arc holds the most USDC for the wallet. Or fix it:eip155:8453Base,eip155:5042Arc mainnet (5042is Arc mainnet, not a typo;5042002is Arc Testnet and is not accepted by data.vangrid.io), oreip155:84532Base Sepolia for testing against a staging API.autoonly ever picks a mainnet, so a testnet has to be named explicitly.EVM_PRIVATE_KEY— spending wallet. Empty starts the server in read-only mode: the free tool works and paid tools return a clear "payment required" message.MAX_USD_PER_CALL/MAX_USD_PER_BOUNTY— hard caps per request. Defaults $0.05 and $100. They cap signing only; the free irreversible tools are not covered. See SECURITY.md.VANGRID_MCP_STORE— override the bounty token file (default~/.vangrid-mcp/bounties.json).VANGRID_HTTP_TIMEOUT_MS— deadline for the whole API call including the x402 retry, default30000.BASE_RPC_URL/ARC_RPC_URL/BASE_SEPOLIA_RPC_URL— read the wallet balance through an RPC you control instead of the public defaults, which otherwise learn the wallet address.
Read-only mode
Without a key the server still starts and vangrid_verify_provenance works. Every paid tool
answers with the price it would have charged and where to get USDC, so an agent can plan the
call before a wallet is attached.
What the server does not do
It does not upload, store or share the private key. The key is read from the environment on start and stays in the process.
It does not talk to the outside network beyond the Vangrid API and the x402 facilitator that settles the payment on the chosen chain.
It does not open a listening socket. Transport is stdio, one line on stderr on start.
It does not persist anything besides the bounty token file above.
Related
API docs: docs.vangrid.io/api
x402 spec: x402.org
Circle Agent Marketplace listing (readiness check): agents.circle.com
License
MIT — see LICENSE.
Available Tools
7 toolsvangrid_accept_submissionAccept a submissionA
Free. Accept one submission on an open bounty you posted. The escrow is released on chain, reconstruction starts, and the full capture and model become available in vangrid_bounty_status. Irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| bounty_id | Yes | ||
| submission_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so: it declares cost ('Free'), the on-chain escrow release, the start of reconstruction, downstream availability of the capture/model, and irreversibility. These are exactly the side-effect and reversal facts an agent needs before invoking a destructive write.
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?
Four short clauses, front-loaded with cost and action, with the irreversible warning last where it lands. The telemetry-style fragment 'Free.' earns its place, though a few fragments stack up.
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?
Covers outcome and where results surface (vangrid_bounty_status), which is important since there is no output schema. It omits any identifier-sourcing guidance, which is the one remaining gap for a two-required-param mutation.
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 0% and neither bounty_id nor submission_id is described in the text beyond loose contextual references ('one submission on an open bounty'). The description does not tell the agent where these identifiers come from or their format, so it fails to compensate for the schema gap.
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?
States a specific verb and resource ('Accept one submission') and scopes it to 'an open bounty you posted,' which is enough to distinguish it from vangrid_post_bounty and vangrid_cancel_bounty without opening a schema.
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 precondition is clear: the bounty must be open and must be one you posted, and only one submission is accepted per call. It does not name an explicit alternative or exclusion, but the implied workflow with vangrid_post_bounty and vangrid_bounty_status is easy to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vangrid_bounty_statusBounty status and submissionsA
Free. Status of a bounty you posted (paid, open, accepting, accepted, cancelled, expired_refunded, failed), its on-chain id and board link, and the submissions received: each with a short preview video URL (valid 15 minutes) and quality status. After accept, links to the full capture and the 3D model appear on the accepted submission.
| Name | Required | Description | Default |
|---|---|---|---|
| bounty_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does well: it discloses cost ('Free'), the complete status lifecycle (paid, open, accepting, accepted, cancelled, expired_refunded, failed), the 15-minute validity of preview video URLs, and that full capture/3D model links are only exposed post-accept. Gaps remain around authorization (it implies ownership but doesn't state it as a requirement) and pagination/limits on the submissions list.
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 the free/summary fact and the core resource, then a conditional detail about post-accept links. The parenthetical status enumeration is dense but earns its place by defining the return vocabulary; no filler sentences.
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?
With no output schema and no annotations, the description sensibly describes the return payload itself: status values, on-chain id, board link, submissions with preview URLs and quality status, plus the post-accept additions. What is missing is pagination/limits for submissions and any error behavior for an invalid or unauthorized bounty_id.
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 0% and bounty_id has no schema description. The description only indirectly clarifies the parameter by scoping it to 'a bounty you posted,' which implies the id must belong to the caller but gives no format or source (e.g., returned by vangrid_post_bounty). This partially compensates for the coverage gap without fully closing it.
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?
States a concrete verb and resource: returns the status of a bounty the caller posted, along with its on-chain id, board link, and submissions received. The read-only status framing is distinguishable from mutating siblings like vangrid_post_bounty, vangrid_accept_submission, and vangrid_cancel_bounty, though none are named explicitly.
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?
Usage is implied rather than stated: 'a bounty you posted' scopes it to your own bounties, and the note that full capture/3D model links 'appear on the accepted submission' after accept tells the agent when extra data becomes available. There is no explicit when-to-use versus-alternatives guidance or stated prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vangrid_cancel_bountyCancel a bountyA
Free. Cancel a bounty you posted while it is still open. The escrow is withdrawn on chain and the USDC is sent back to the wallet that paid.
| Name | Required | Description | Default |
|---|---|---|---|
| bounty_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: the operation is free, the escrow is withdrawn on chain, and USDC is returned to the paying wallet. It does not state irreversibility, failure modes, or ownership/permission requirements beyond the implied 'you posted', which are notable gaps for a destructive on-chain 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?
Three short sentences with the cost fact front-loaded and the precondition before the on-chain effect. Every sentence carries information; the one-word 'Free.' opener is terse but purposeful.
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 one-parameter mutation tool with no output schema, the description covers the precondition and the financial consequence well enough to call it correctly. Missing permission/auth detail and the post-cancellation state keep it from being fully 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 description coverage is 0% and the description says nothing about bounty_id (format, where to obtain it). The single parameter is self-explanatory from its name, so the cost is small, but the description fails to compensate for the coverage gap as the low-coverage rule requires.
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?
States a specific verb and resource ('cancel a bounty') plus the two conditions that make it valid: you posted it and it is still open. This cleanly separates it from siblings like vangrid_post_bounty and vangrid_accept_submission without needing the schemas.
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 preconditions ('you posted', 'still open') tell the agent exactly when this tool applies, which is the core of usage guidance. It stops short of naming an alternative for the case where those preconditions fail (e.g., check vangrid_bounty_status first), so it is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vangrid_coverage_queryVangrid coverage queryA
Find anchored ground-level captures inside an area and time window. Each observation carries a coarse location (geohash precision 6), capture time and the EAS attestation on Base that anchors it. Paid per call in USDC on Base (eip155:8453) or Arc mainnet (eip155:5042), about $0.01. Area: GeoJSON Point with radius_m (max 5000) or a Polygon whose bounding box is at most 100 km².
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ISO-8601 end, default now | |
| aoi | Yes | GeoJSON geometry: Point [lng, lat] or Polygon [[[lng, lat], ...]] | |
| from | No | ISO-8601 start, default 7 days before "to" | |
| limit | No | default 100 | |
| radius_m | No | Point only: radius in metres, default 500 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses paid-per-call pricing in USDC on Base (eip155:8453) or Arc (eip155:5042) at ~$0.01, the coarse geohash-6 location precision, the EAS attestation anchoring, and hard area limits. It omits any note on rate limits or failure modes, which keeps it short of a 5.
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?
Three dense sentences that are front-loaded on what the tool returns, followed by cost and area constraints. The pricing sentence packs two chains, addresses and a cost figure, but every element is load-bearing for a paid tool, so little is wasted.
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?
With no output schema, the description correctly spends space enumerating return fields (coarse location, capture time, EAS attestation), and it covers payment and area validity. It leaves pagination/limit semantics and error behavior to the schema, which is acceptable for this complexity level.
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 baseline is 3, but the description adds constraints the schema does not encode: the bbox limit of 100 km² and the max radius of 5000 m tied to Point geometry. It still doesn't clarify defaults for from/to or limit behavior beyond 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?
States a specific verb ('Find') and resource ('anchored ground-level captures') bounded by an area and time window, so the agent knows exactly what comes back. It does not name a sibling like vangrid_observation or vangrid_verify_provenance, so differentiation must be inferred from the noun phrase alone.
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 area/time framing implies when the tool is appropriate (spatial coverage inspection), but there is no explicit when-to-use/when-not-to-use guidance and no routing to the sibling tools that fetch a single observation or verify provenance. Usage is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vangrid_observationVangrid observationA
Fetch one anchored capture by its sha256 (with or without 0x): coarse location, capture time and EAS attestation on Base. Paid per call in USDC on Base (eip155:8453) or Arc mainnet (eip155:5042), about $0.005.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | sha256 hex of the capture |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the non-obvious behavior: this is a paid read, priced at roughly $0.005 USDC, payable on Base (eip155:8453) or Arc (eip155:5042). It also names the data returned and where attestation lives. It omits failure modes (unknown hash, unpaid call) but covers the critical commercial/payment traits.
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, tightly packed, front-loaded with what is fetched and keyed on before moving to payment details. No 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?
With no output schema and no annotations, the description compensates by enumerating the returned fields (coarse location, capture time, EAS attestation) and the payment rails. For a one-parameter read tool this is close to complete; only error/edge-case behavior is left unspecified.
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 the single id parameter documented, so the baseline is 3; the description adds real value by clarifying the hash may be supplied with or without a 0x prefix, a format detail the schema does not state.
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?
States a specific verb (fetch), resource (one anchored capture), identifier (sha256) and the returned content (location, capture time, EAS attestation on Base). However, it does not distinguish itself from the sibling vangrid_verify_provenance, which plausibly also operates on a capture hash, so an agent still has to infer the boundary between the two.
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?
Usage is implied by the purpose and the cost note ('paid per call... about $0.005') implicitly warns the agent to use it deliberately, but there is no explicit when-to-use vs. when-to-use-an-alternative guidance and no mention of verify_provenance or coverage_query as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vangrid_post_bountyCommission a capture (post a bounty)A
Commission a ground-level 3D capture of a real place. You pay the bounty amount in USDC on Base or Arc mainnet right away; Vangrid posts it to its bounty board, a contributor films it, and you review submissions with vangrid_bounty_status and accept one with vangrid_accept_submission to receive the reconstruction. If nothing is accepted by the deadline, or you cancel while open, the USDC comes back to your wallet. Amount is whole USDC between the limits the server quotes (by default 50 to 5000). The bounty token is kept locally; later tools only need bounty_id.
| Name | Required | Description | Default |
|---|---|---|---|
| brief | Yes | What to film, where exactly, what must be in frame, daylight or not | |
| title | Yes | Short name of the place or task | |
| amount_usdc | Yes | Bounty amount in whole USDC; this is what you pay now | |
| deadline_days | No | Days until the bounty expires, default 7 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so well: it discloses immediate USDC payment on Base or Arc mainnet, refund-on-cancel/deadline behavior, server-quoted amount limits (default 50–5000), and that the bounty token is stored locally so later tools only need bounty_id. This is exactly the behavioral context an agent needs before committing funds.
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?
Front-loaded with the core action and payment consequence, then the workflow, then constraints. It is dense and runs as one long paragraph, but nearly every clause earns its place; a break into workflow vs. constraints would slightly improve scanability.
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?
There is no output schema, and the description implies the return contains a bounty_id but does not state the response shape explicitly. Otherwise it fully covers the action, cost, refund path, and follow-up tools, making it complete enough for correct invocation.
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 already 100%, so the schema documents field constraints. The description still adds value the schema lacks: the server-quoted amount band (50–5000, overriding the schema's misleading minimum of 1) and the deadline default of 7 days, which the schema does not state. That is meaningful supplementation beyond 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?
States a specific verb+resource ('Commission a ground-level 3D capture of a real place') and immediately frames the mechanism as posting to a bounty board, which cleanly distinguishes it from siblings like vangrid_coverage_query and vangrid_verify_provenance. An agent can identify this as the create-a-bounty entry point without opening the schema.
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 routes the agent through the lifecycle and names the sibling tools for each step: review with vangrid_bounty_status, accept with vangrid_accept_submission, and the implicit cancel path via vangrid_cancel_bounty. It also states the triggering condition for refunds (no acceptance by deadline, or cancellation while open).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vangrid_verify_provenanceVangrid provenance checkA
Free. Check whether a sha256 is a capture anchored by Vangrid on Base. Returns verified true/false and, when true, the capture time, coarse location and the attestation reference.
| Name | Required | Description | Default |
|---|---|---|---|
| hash | Yes | sha256 hex of the capture |
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 helpfully discloses cost (free), read-only intent, and the return shape (verified boolean plus capture time, coarse location, attestation reference). It omits auth requirements, rate limits, and what happens on a negative result, so it is only partially complete for an unannotated tool.
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 the cost signal and the core question, with zero filler. Every clause carries either trigger or return-value information.
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 one-parameter tool with no output schema, the description usefully enumerates the return fields and the true/false semantics. It is nearly complete, lacking only failure/negative-case behavior and any auth or rate-limit 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?
With schema coverage at 100% and a single parameter, the schema already documents the hash input fully. The description restates that it is a sha256 of a capture, adding no format or encoding detail beyond the schema, so the baseline 3 applies.
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?
States a specific verb (check/verify) and a precise resource (whether a sha256 is a capture anchored by Vangrid on Base). An agent can distinguish this from siblings like vangrid_observation or vangrid_bounty_status without opening a schema because the anchoring/attestation concept is unique in the sibling set.
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 leading "Free." signals a cost consideration that implies when this cheap check is preferable, and the input (a sha256) makes the trigger obvious. However, it never explicitly says when to use this vs. alternatives or states prerequisites such as needing a previously anchored hash.
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.
7 tool updates
v0.1.0- First observed
vangrid_accept_submission - First observed
vangrid_bounty_status - First observed
vangrid_cancel_bounty - First observed
vangrid_coverage_query - First observed
vangrid_observation - First observed
vangrid_post_bounty - First observed
vangrid_verify_provenance
TDQS
Scored across 7 tools
Each tool targets a distinct operation: fetch one capture by hash, query coverage by area/time, verify provenance, and post/status/accept/cancel a bounty. The only potential overlap between vangrid_observation and vangrid_verify_provenance is resolved clearly by paid-vs-free and fetch-vs-boolean descriptions.
All names use snake_case and the vangrid_ prefix consistently, but the pattern is not uniformly verb_noun: some are noun phrases like vangrid_observation, vangrid_coverage_query, and vangrid_bounty_status. The grouping remains readable and predictable within read/write categories.
Seven tools are well-scoped for this domain, covering capture retrieval, verification, and the full bounty lifecycle without redundant or filler tools. The count matches the apparent purpose.
The surface covers the commissioner workflow end-to-end: verify, fetch, and query captures, then post, monitor, accept, and cancel bounties. No obvious operational gaps exist for the stated client role, and contributor-side submission appears intentionally external.
Maintenance
Related MCP Connectors
Market data and web intelligence for AI agents, paid per call in USDC on Base via x402.
Pay-per-call tools for autonomous agents, settled in USDC on Base via x402.
Market and on-chain crypto data for AI agents. Pay per call in USDC on Base (x402).
Pay-per-call crypto market intelligence for AI agents. USDC on Base via x402.
Related MCP Servers
- AlicenseAqualityDmaintenanceOn-demand live vision MCP for AI agents — open a session at a lat/lng, receive a JPEG snapshot or WebRTC stream, settled per-second in USDC on Base. Four tools (get_session, get_frame, get_stream_url, cancel_session); currently Base Sepolia testnet.41MIT

valorem-mev-mcpofficial
AlicenseAqualityDmaintenanceGives MCP-compatible LLM agents direct access to real-time MEV and DeFi data via Valorem's x402-paid API endpoints, with payments in USDC on Base mainnet.915 npmMIT- AlicenseNot gradedqualityCmaintenanceEnables agents to discover, sample, and pay per call in USDC for live threat intelligence, ZK proof generation, and arbitrage signals via the x402 protocol.MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to discover and invoke x402-monetized computational engines for media geometry, measurements, JSON hygiene, and ComfyUI preflight audits, with USDC settlement on Base Mainnet.-