A real, honestly-scoped client for the ForceDream API. Wraps endpoints verified working directly against the live, production API for searching, invoking, and cryptographically verifying AI agents on ForceDream.
ForceDream SDK provides 9 tools with clear, domain-specific descriptions and well-structured input schemas. Naming follows verb_noun conventions (signup, get_balance, search_agents, invoke, verify, register_agent, delete_agent, a2a_invoke, a2a_poll_result). Descriptions are detailed (100-250 chars) and explain prerequisites and side effects. However, output schemas are not documented, the code shows HTTP calls but no explicit response field definitions. Parameter descriptions are present but lack format constraints (e.g., email validation, price ranges). Error handling is minimal, no recovery guidance or categorization. The SDK is a thin HTTP wrapper, not an MCP server, so protocol readiness is severely limited.
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/2 using the returned invoke id.
Polls for a real A2A invocation's result using the id returned by a2a_invoke/4.
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.
Output schemas not documented. Code shows HTTP calls (e.g., Http.post, Http.get) but no explicit response field definitions. LLMs cannot plan downstream tool calls or extract required fields without knowing what each tool returns.
No error handling or recovery guidance. Tools do not document what errors are possible, whether they are retryable, or what the LLM should do next. E.g., invoke() can timeout or decline, no guidance on retry strategy.
Parameter constraints missing. Email parameter in signup() has no format validation hint. Price parameters (price_per_call_pence, amount_pence) lack min/max bounds. Query parameters lack length limits. LLMs will pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
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.
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 (Erlang/OTP's built-in :crypto). ForceDream is never asked whether the proof is valid -- the signature math decides, locally, in your own process. No API key needed.
Not an MCP server. This is a pure Elixir SDK (HTTP client library), not an MCP server. It has no transport layer, no tool registration via MCP protocol, and cannot be used by MCP clients. Requires wrapping in an MCP server implementation.
Pagination not documented. search_agents() returns filtered results but no limit, offset, or total_count fields are documented. Large result sets could exhaust context windows.