Skip to main content
Glama

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

vangrid_verify_provenance

free

is this sha256 an anchored Vangrid capture, and where

vangrid_coverage_query

~$0.01

captures inside an area of interest and time window

vangrid_observation

~$0.005

one capture by its sha256

vangrid_post_bounty

the bounty amount

commission a capture; agent pays it upfront

vangrid_bounty_status

free

status, submissions with watermarked previews, model links after accept

vangrid_accept_submission

free

accept one submission; escrow released, reconstruction starts

vangrid_cancel_bounty

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 .env

1. 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.mjs

Prints 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.js

You 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 cf9642dae244a213bc9c0e6d325a84be44fe8fd1f57d9b362c64493769b74a48 a 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-mcp

From 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 to https://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:8453 Base, eip155:5042 Arc mainnet (5042 is Arc mainnet, not a typo; 5042002 is Arc Testnet and is not accepted by data.vangrid.io), or eip155:84532 Base Sepolia for testing against a staging API. auto only 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, default 30000.

  • 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.

License

MIT — see LICENSE.

Available Tools

7 tools
vangrid_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bounty_idYes
submission_idYes

TDQS

A4.1/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bounty_idYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
bounty_idYes

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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².

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoISO-8601 end, default now
aoiYesGeoJSON geometry: Point [lng, lat] or Polygon [[[lng, lat], ...]]
fromNoISO-8601 start, default 7 days before "to"
limitNodefault 100
radius_mNoPoint only: radius in metres, default 500

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYessha256 hex of the capture

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
briefYesWhat to film, where exactly, what must be in frame, daylight or not
titleYesShort name of the place or task
amount_usdcYesBounty amount in whole USDC; this is what you pay now
deadline_daysNoDays until the bounty expires, default 7

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
hashYessha256 hex of the capture

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 7 tool updatesv0.1.0
    • First observedvangrid_accept_submission
    • First observedvangrid_bounty_status
    • First observedvangrid_cancel_bounty
    • First observedvangrid_coverage_query
    • First observedvangrid_observation
    • First observedvangrid_post_bounty
    • First observedvangrid_verify_provenance

TDQS

A4.2/5.0

Scored across 7 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers