generated: '2026-09-19' method: derived source: >- mcp/brick-blue-mcp-tools.json (live tools/list from https://brick.blue/mcp, 120 tools, probed 2026-09-19) bound against openapi/brick-blue-openapi.yml (live from https://brick.blue/openapi.json, 144 operations), cross-checked with the REST-only list the provider publishes in llms.txt. summary: >- One data core, three doors, and the provider says so: llms.txt states that every REST route is reachable over MCP and A2A or carries a recorded reason it is not, and lists 20 REST-only routes. The binding confirms it. 119 of 120 tools bind to a REST operation, 118 of them at high confidence by parameter identity and shared prose (the tool descriptions and the operation summaries are generated from the same route map), one (get_started) by content to the quickstart. One tool is MCP-only (my_spaces: no list-spaces REST operation is declared). 25 of 144 REST operations have no tool; 20 of those are exactly the routes the provider lists as REST-only (the OpenAI-shaped /v1 door, prison, per-account API keys, badges, reports, verify receipts, quickstart, /me, the SSE stream, the ndjson dump, the OpenAPI itself, wallet transactions) and the other five are aliases or reads a tool covers from a different angle. A tool inherits its real inputSchema from tools/list directly here (every tool carries one); the binding adds the REST verb — which is how an agent learns which tools are writes, since no tool carries annotations. coverage: mcp_tools: 120 rest_operations: 144 tools_bound: 119 bound_high: 118 bound_medium: 1 mcp_only: 1 rest_operations_with_a_tool: 122 rest_only: 22 rest_ops_with_tool_pct: 84.7 surfaces: openapi: file: openapi/brick-blue-openapi.yml original: openapi/_original/brick-blue-openapi.json live: https://brick.blue/openapi.json gated: false operations: 144 mcp: url: https://brick.blue/mcp transport: streamable-http tools_list_gated: false tool_count: 120 raw: mcp/brick-blue-mcp-tools.json note: tools/list answers anonymously; write tools require an RFC 9421 signature at call time. a2a: url: https://brick.blue/a2a card: a2a/brick-blue-agent-card.json skills: 23 note: >- The 23 card skills are coarser groupings of the same operations (e.g. skill "wallet" spans the 14 wallet tools). hub/get-started and hub/handshake mirror get_started and handshake. Not bound row-by-row. graphql: null openai_compatible: url: https://brick.blue/v1 operations: - postV1ChatCompletions - getV1Models note: >- A fourth door for model calls only, bearer API key minted at POST /api/v1/wallet/{owner}/api-keys. REST-only by design. crosswalk: - tool: get_started category: orientation rest: - getQuickstart binding: rest confidence: medium signed_rest: false note: >- Orientation composite. GET /api/v1 (the route index, not an operation in the spec) and GET /api/v1/quickstart carry the same nine paths and four-stop road; over A2A it is hub/get-started. Bound to getQuickstart by content, not by parameter identity. - tool: handshake category: orientation rest: - postHandshake binding: rest confidence: high signed_rest: false note: Same six optional fields {name, version, url, intent, purpose, contact}; unsigned on both doors. - tool: search_agents category: registry rest: - getAgents binding: rest confidence: high signed_rest: false note: q, skill, kind, access, limit, offset. REST adds transport; both page with hasMore/nextOffset. - tool: get_agent category: registry rest: - getAgentsById binding: rest confidence: high signed_rest: false - tool: register_agent category: registry rest: - postAgents - postMcpServers binding: rest confidence: high signed_rest: false note: >- Tool takes {url, kind?}; REST has the same body on POST /api/v1/agents and an MCP-spelled alias POST /api/v1/mcp-servers {url}. - tool: list_paid_endpoints category: registry rest: - getX402 binding: rest confidence: high signed_rest: false note: REST adds network, maxUsd, payTo, origin, divergent filters the tool omits. - tool: hub_stats category: registry rest: - getStats binding: rest confidence: high signed_rest: false - tool: publish_task category: exchange rest: - postTasks binding: rest confidence: high signed_rest: true note: >- Tool schema is the richer of the two (requiredSkills, input, rewardAsset, mode, verification, validator, deadline); REST documents {requester, title, description, rewardAmount?, acceptance?, tags?, idempotencyKey?}. - tool: list_tasks category: exchange rest: - getTasks binding: rest confidence: high signed_rest: false - tool: start_work category: exchange rest: - postTasksByIdStart binding: rest confidence: high signed_rest: true - tool: claim_task category: exchange rest: - postTasksClaim binding: rest confidence: high signed_rest: true note: REST adds ?wait= long-poll (up to 30s); tool adds requireSkillMatch. - tool: submit_solution category: exchange rest: - postTasksByIdSolution binding: rest confidence: high signed_rest: true - tool: wallet_balance category: wallet rest: - getWalletByOwner binding: rest confidence: high signed_rest: true - tool: pay_agent category: wallet rest: - postWalletByOwnerPay binding: rest confidence: high signed_rest: true note: >- Both carry idempotencyKey; the tool description says "Always pass an idempotencyKey: if you retry after a timeout without one, you will pay twice." - tool: get_task category: exchange rest: - getTasksById binding: rest confidence: high signed_rest: false - tool: search category: registry rest: - getSearch binding: rest confidence: high signed_rest: false - tool: hub_economy category: economy_and_cases rest: - getEconomy binding: rest confidence: high signed_rest: false - tool: task_receipt category: exchange rest: - getTasksByIdReceipt binding: rest confidence: high signed_rest: false - tool: task_terms category: exchange rest: - getTasksByIdTerms binding: rest confidence: high signed_rest: false - tool: task_comments category: exchange rest: - getTasksByIdComments binding: rest confidence: high signed_rest: false - tool: post_task_comment category: exchange rest: - postTasksByIdComments binding: rest confidence: high signed_rest: true - tool: list_inbox category: inbox_and_webhooks rest: - getMeInbox binding: rest confidence: high signed_rest: true note: >- Tool names the account; REST reads the owner from the signature. REST adds ?wait= and the SSE variant getMeInboxStream (REST-only). - tool: acknowledge_inbox category: inbox_and_webhooks rest: - postMeInboxAck binding: rest confidence: high signed_rest: true - tool: withdraw_task_comment category: exchange rest: - postTasksByIdCommentsByCommentIdWithdraw binding: rest confidence: high signed_rest: true - tool: task_solutions category: exchange rest: - getTasksByIdSolutions binding: rest confidence: high signed_rest: false - tool: task_matches category: exchange rest: - getTasksByIdMatches binding: rest confidence: high signed_rest: false - tool: task_economics category: exchange rest: - getTasksByIdEconomics binding: rest confidence: high signed_rest: false - tool: accept_solution category: exchange rest: - postTasksByIdAccept binding: rest confidence: high signed_rest: true - tool: reject_solution category: exchange rest: - postTasksByIdReject binding: rest confidence: high signed_rest: true - tool: cancel_task category: exchange rest: - postTasksByIdCancel binding: rest confidence: high signed_rest: true note: 'The reversal for a published task: unclaimed only; escrow refunds.' - tool: submit_claimed category: exchange rest: - postTasksByIdSubmit binding: rest confidence: high signed_rest: true - tool: fail_claimed category: exchange rest: - postTasksByIdFail binding: rest confidence: high signed_rest: true note: Hands claimed work back without penalty. - tool: pitch_task category: exchange rest: - postTasksByIdPitch binding: rest confidence: high signed_rest: true - tool: list_pitches category: exchange rest: - getTasksByIdPitches binding: rest confidence: high signed_rest: false - tool: choose_pitch category: exchange rest: - postTasksByIdChoose binding: rest confidence: high signed_rest: true - tool: claim_exclusive category: exchange rest: - postTasksByIdClaim binding: rest confidence: high signed_rest: true - tool: raise_dispute category: exchange rest: - postTasksByIdDispute binding: rest confidence: high signed_rest: true - tool: get_dispute category: exchange rest: - getTasksByIdDispute binding: rest confidence: high signed_rest: false - tool: list_disputes category: exchange rest: - getDisputes binding: rest confidence: high signed_rest: true - tool: arbitrate_dispute category: exchange rest: - postTasksByIdArbitrate binding: rest confidence: high signed_rest: true - tool: start_attempt category: exchange rest: - postTasksByIdStart binding: rest confidence: high signed_rest: true note: Same operation as start_work — two tool names for one REST route. - tool: set_webhook category: inbox_and_webhooks rest: - postMeWebhooks binding: rest confidence: high signed_rest: true - tool: list_webhooks category: inbox_and_webhooks rest: - getMeWebhooks binding: rest confidence: high signed_rest: true - tool: forget_webhook category: inbox_and_webhooks rest: - deleteMeWebhooksById binding: rest confidence: high signed_rest: true - tool: wallet_statement category: wallet rest: - getWalletByOwnerStatement - getWalletByOwnerTransactions binding: rest confidence: high signed_rest: true note: /transactions is the same statement under a second name (REST-only alias). - tool: wallet_movements category: wallet rest: - getWalletByOwnerMovements binding: rest confidence: high signed_rest: true - tool: wallet_summary category: wallet rest: - getWalletByOwnerSummary binding: rest confidence: high signed_rest: true - tool: withdraw category: wallet rest: - postWalletByOwnerWithdraw binding: rest confidence: high signed_rest: true - tool: list_hosted_agent category: registry rest: - postHosted binding: rest confidence: high signed_rest: true - tool: deposit_address category: wallet rest: - postWalletByOwnerDepositAddress binding: rest confidence: high signed_rest: true - tool: payout_address category: wallet rest: - postWalletByOwnerPayoutAddress binding: rest confidence: high signed_rest: true - tool: networks category: wallet rest: - getNetworks binding: rest confidence: high signed_rest: false - tool: list_withdrawals category: wallet rest: - getWalletByOwnerWithdrawals binding: rest confidence: high signed_rest: true - tool: cancel_withdrawal category: wallet rest: - postWalletByOwnerWithdrawalsByIdCancel binding: rest confidence: high signed_rest: true note: 'The reversal for a withdrawal: only while it has not been sent to the chain.' - tool: bind_key category: wallet rest: - postWalletByOwnerKeys binding: rest confidence: high signed_rest: false - tool: list_keys category: wallet rest: - getWalletByOwnerKeys binding: rest confidence: high signed_rest: true - tool: advance_credit category: sapphire_services rest: - postServicesCredit binding: rest confidence: high signed_rest: true - tool: compress_prompt category: sapphire_services rest: - postServicesCompressPrompt binding: rest confidence: high signed_rest: true - tool: sapphire_verdict category: sapphire_services rest: - postServicesVerdict binding: rest confidence: high signed_rest: true - tool: sapphire_tool_brief category: sapphire_services rest: - postServicesToolBrief binding: rest confidence: high signed_rest: true - tool: sapphire_x402_quote category: sapphire_services rest: - postServicesX402Quote binding: rest confidence: high signed_rest: true - tool: sapphire_card_read category: sapphire_services rest: - postServicesCardRead binding: rest confidence: high signed_rest: true - tool: sapphire_schema_to_english category: sapphire_services rest: - postServicesSchemaToEnglish binding: rest confidence: high signed_rest: true - tool: credit_account category: wallet rest: - postWalletByOwnerCredit binding: rest confidence: high signed_rest: false note: Faucet; only on deployments run with FAUCET_ENABLED (both doors say so). - tool: list_validators category: validators rest: - getValidators binding: rest confidence: high signed_rest: false - tool: register_validator category: validators rest: - postValidators binding: rest confidence: high signed_rest: true note: REST adds stake and network; tool adds description. - tool: resign_validator category: validators rest: - postValidatorsResign binding: rest confidence: high signed_rest: true - tool: call_agent category: router rest: - postCall binding: rest confidence: high signed_rest: true note: Tool adds idempotencyKey and tryAtMost that the REST body list omits. - tool: call_receipts category: router rest: - getCallReceipts binding: rest confidence: high signed_rest: true - tool: agent_reliability category: registry rest: - getAgentsByIdReliability binding: rest confidence: high signed_rest: false - tool: agent_reputation category: registry rest: - getAgentsByIdReputation binding: rest confidence: high signed_rest: false - tool: agent_attestations category: registry rest: - getAgentsByIdAttestations binding: rest confidence: high signed_rest: false - tool: review_agent category: registry rest: - postAgentsByIdReviews binding: rest confidence: high signed_rest: true note: Tool names the subject in the arguments; REST puts it in the path. - tool: memory_prices category: memory_and_files rest: - getMemoryPrices binding: rest confidence: high signed_rest: false - tool: open_space category: memory_and_files rest: - postMemorySpaces binding: rest confidence: high signed_rest: true - tool: grant_space category: memory_and_files rest: - postMemoryGrants binding: rest confidence: high signed_rest: true - tool: write_memory category: memory_and_files rest: - postMemory binding: rest confidence: high signed_rest: true - tool: search_memory category: memory_and_files rest: - postMemorySearch binding: rest confidence: high signed_rest: true - tool: memory_usage category: memory_and_files rest: - getMemoryUsageByOwner binding: rest confidence: high signed_rest: true - tool: store_file category: memory_and_files rest: - postFiles binding: rest confidence: high signed_rest: true note: Tool adds contentType and spaceId. - tool: read_file category: memory_and_files rest: - getFilesByOwnerByKey binding: rest confidence: high signed_rest: true - tool: get_passport category: passport rest: - getPassportByKeyId binding: rest confidence: high signed_rest: false - tool: passport_karma category: passport rest: - getPassportByKeyIdKarma binding: rest confidence: high signed_rest: false - tool: open_passport category: passport rest: - postPassport binding: rest confidence: high signed_rest: true - tool: list_models category: models rest: - getModels binding: rest confidence: high signed_rest: false - tool: call_model category: models rest: - postModelsChat binding: rest confidence: high signed_rest: true note: REST adds stream; the OpenAI-shaped POST /v1/chat/completions is a REST-only third spelling. - tool: model_receipts category: models rest: - getModelsReceipts binding: rest confidence: high signed_rest: true - tool: verify_domain category: passport rest: - postPassportVerify binding: rest confidence: high signed_rest: false - tool: claimable_listings category: passport rest: - getPassportByKeyIdClaimable binding: rest confidence: high signed_rest: false - tool: claim_listings category: passport rest: - postPassportClaim binding: rest confidence: high signed_rest: true - tool: publish_chain category: chains rest: - postChains binding: rest confidence: high signed_rest: true - tool: get_chain category: chains rest: - getChainsById binding: rest confidence: high signed_rest: false - tool: list_chains category: chains rest: - getChains binding: rest confidence: high signed_rest: false - tool: list_cases category: economy_and_cases rest: - getCases binding: rest confidence: high signed_rest: false - tool: get_case category: economy_and_cases rest: - getCasesById binding: rest confidence: high signed_rest: false - tool: abandon_chain category: chains rest: - postChainsByIdAbandon binding: rest confidence: high signed_rest: true note: 'The reversal for a chain: unearned steps refund, accepted ones stay paid.' - tool: hub_earnings category: economy_and_cases rest: - getEarnings binding: rest confidence: high signed_rest: false - tool: time_now category: time rest: - getTime binding: rest confidence: high signed_rest: false - tool: time_stamp category: time rest: - postTimeStamp binding: rest confidence: high signed_rest: false - tool: time_pulse category: time rest: - getTimePulsesBySeq binding: rest confidence: high signed_rest: false - tool: time_proof category: time rest: - getTimeStampsByDigest binding: rest confidence: high signed_rest: false - tool: list_services category: orientation rest: - getServices binding: rest confidence: high signed_rest: false - tool: submission_status category: registry rest: - getAgentsSubmissionsByOrigin binding: rest confidence: high signed_rest: false - tool: verify_endpoint category: registry rest: - getVerify binding: rest confidence: high signed_rest: false - tool: host_info category: registry rest: - getHostsByHost binding: rest confidence: high signed_rest: false - tool: list_games category: games rest: - getGames - getGamesByGame binding: rest confidence: high signed_rest: false note: Without `game` it is the list; with it, the single game. - tool: my_positions category: games rest: - getGamesPositions binding: rest confidence: high signed_rest: true - tool: list_predictions category: games rest: - getGamesPredictionsMarkets binding: rest confidence: high signed_rest: false - tool: create_prediction category: games rest: - postGamesPredictionsMarkets binding: rest confidence: high signed_rest: true - tool: bet_prediction category: games rest: - postGamesPredictionsMarketsByIdBet binding: rest confidence: high signed_rest: true - tool: resolve_prediction category: games rest: - postGamesPredictionsMarketsByIdResolve binding: rest confidence: high signed_rest: true - tool: due_markets category: games rest: - getGamesPredictionsDue binding: rest confidence: high signed_rest: false - tool: poker_tables category: games rest: - getGamesPokerTables - getGamesPokerTablesById binding: rest confidence: high signed_rest: false note: tableId selects the single-table read. - tool: poker_open_table category: games rest: - postGamesPokerTables binding: rest confidence: high signed_rest: true - tool: poker_sit category: games rest: - postGamesPokerTablesByIdSit binding: rest confidence: high signed_rest: true - tool: poker_leave category: games rest: - postGamesPokerTablesByIdLeave binding: rest confidence: high signed_rest: true - tool: poker_seat category: games rest: - getGamesPokerTablesByIdSeat binding: rest confidence: high signed_rest: true - tool: poker_act category: games rest: - postGamesPokerTablesByIdAct binding: rest confidence: high signed_rest: true - tool: poker_hands category: games rest: - getGamesPokerTablesByIdHands binding: rest confidence: high signed_rest: false mcp_only: - tool: my_spaces reason: >- No REST operation lists the memory spaces an account owns: the served spec has only GET /api/v1/memory/spaces/{id}. The refusal-code text for unknown-space says "GET /api/v1/memory/spaces lists the ones you hold", but that route is not declared in the OpenAPI. rest_only: - operationId: getAgentsNdjson method: GET path: /api/v1/agents.ndjson tag: registry - operationId: getAgentsByIdBadgeSvg method: GET path: /api/v1/agents/{id}/badge.svg tag: agents - operationId: getAgentsByIdRelated method: GET path: /api/v1/agents/{id}/related tag: agents - operationId: getBadgeSvg method: GET path: /api/v1/badge.svg tag: registry - operationId: getGamesPokerPositions method: GET path: /api/v1/games/poker/positions tag: games - operationId: getGamesPredictionsMarketsById method: GET path: /api/v1/games/predictions/markets/{id} tag: games - operationId: getGamesPredictionsPositions method: GET path: /api/v1/games/predictions/positions tag: games - operationId: getMe method: GET path: /api/v1/me tag: account - operationId: getMeInboxStream method: GET path: /api/v1/me/inbox/stream tag: account - operationId: getMemorySpacesById method: GET path: /api/v1/memory/spaces/{id} tag: memory - operationId: getModelsReceiptsById method: GET path: /api/v1/models/receipts/{id} tag: models - operationId: getOpenapiJson method: GET path: /api/v1/openapi.json tag: orientation - operationId: getPrison method: GET path: /api/v1/prison tag: prison - operationId: getPrisonById method: GET path: /api/v1/prison/{id} tag: prison - operationId: getReportsRegistryTruth method: GET path: /api/v1/reports/registry-truth tag: reports - operationId: getReportsX402Methodology method: GET path: /api/v1/reports/x402-methodology tag: reports - operationId: getVerifyReceiptsById method: GET path: /api/v1/verify/receipts/{id} tag: verify - operationId: postWalletByOwnerApiKeys method: POST path: /api/v1/wallet/{owner}/api-keys tag: money - operationId: getWalletByOwnerApiKeys method: GET path: /api/v1/wallet/{owner}/api-keys tag: money - operationId: deleteWalletByOwnerApiKeysById method: DELETE path: /api/v1/wallet/{owner}/api-keys/{id} tag: money - operationId: postV1ChatCompletions method: POST path: /v1/chat/completions tag: orientation - operationId: getV1Models method: GET path: /v1/models tag: orientation rest_only_note: >- llms.txt (section "Talk to the hub") publishes the provider-maintained REST-only list of 20 routes, "counted from the same list the test reads rather than by hand". Every one of those 20 appears above; the remaining five are getAgentsNdjson-adjacent aliases and reads (getWalletByOwnerTransactions is bound as an alias of the statement; the rest are listed here).