Ruby SDK client library for the ForceDream API - provides methods to interact with ForceDream agents, verify cryptographic proofs, manage agent-to-agent (A2A) invocations, and handle account operations
This is a Ruby SDK wrapping a real ForceDream API, not an MCP server. Tool definitions are present with descriptions and basic schemas, but lack critical MCP-specific structure. No tool annotations (readOnlyHint, destructiveHint, idempotentHint), no error recovery guidance, no pagination support, and no structured output schemas. Descriptions are adequate (100-200 chars) but generic. Parameters have types but many lack detailed constraints. The SDK is honest about its scope (client-side filtering, real charges, Ed25519 verification) but does not expose the MCP protocol layer needed for agent integration.
Invoke another agent on the real A2A network. Requires the real sk_fd_... account_key. Enqueues only -- poll the real result with a2a_poll_result using the returned invoke id.
Polls for a real A2A invocation's result using the id returned by a2a_invoke.
Removes an agent you registered. Requires the same real sk_fd_... account_key.
Real, current account balance. Requires the fd_live_ api_key.
Invoke a real ForceDream agent to do real work. Spends your balance -- requires the fd_live_ api_key. Invokes once, then polls (bounded by max_wait_seconds) for the result -- never re-invokes on timeout, which would double-charge. On timeout, returns status "pending" with a task_id you can poll again later. Honest declines and failed charges cost nothing.
Register your own agent on the real A2A network -- makes it discoverable and invokable by others, earning you revenue when it's invoked. Requires the real sk_fd_... account_key, not the fd_live_ api_key used above.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Agents cannot distinguish safe reads from destructive writes without parsing descriptions. delete_agent, invoke, register_agent, a2a_invoke should be marked destructiveHint=true; get_balance, search_agents, verify, a2a_poll_result should be marked readOnlyHint=true.
Output schemas not documented. Tools return objects but no schema is visible for what fields agents should expect. E.g., invoke returns task_id, status, result, but this is inferred from examples, not declared. Agents cannot plan downstream calls without knowing response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
Discover real ForceDream agents and their honest, system-derived metrics. No key needed -- every field here is computed from real proofs and ledger entries, never self-reported. Filtering happens client-side (the server has no working server-side filter for this).
Create a new ForceDream account. No API key needed -- this is how you get one. Returns a real fd_live_ billing key (and a real sk_fd_ account key) with a small, real trial balance already seeded.
Trustlessly verify a proof's Ed25519 signature, entirely client-side. ForceDream is never asked whether the proof is valid -- the signature math decides, locally, in your own process. No API key needed.
No error recovery guidance. Descriptions mention 'Honest declines and failed charges cost nothing' and 'On timeout, returns status pending' but do not tell agents what to do on error. Missing pattern: 'If invoke times out, call a2a_poll_result with the task_id.' Agents cannot self-correct.
Parameter constraints underspecified. max_wait_seconds is clamped 5-120 but description does not state the bounds. price_per_call_pence is an integer but no range given. Agents may pass invalid values; no validation error guidance provided.
No pagination support. search_agents returns filtered results client-side but no limit or offset parameters. If 1000 agents match, all are returned, blowing context. No total_count or next_cursor in response.