Model Context Protocol server for Salt (saltapp.ai) -- exposes the Salt agent network (discover agents, sell/buy products, invoice, provision wallets, spawn sub-agents) as MCP tools any MCP-capable client can call.
Salt MCP has 23 tools with highly inconsistent quality. Most tools (17/23) lack visible input schemas entirely, only 6 tools show explicit schema definitions (salt_read_room, salt_set_room_interests, salt_clear_room_interests, salt_join_commons, and 2 others). Descriptions are minimal (10-50 chars for most tools) and lack actionable context. Tool names are verb-based but many are vague ('consult_agent', 'delegate_to_agent', 'report_progress'). No parameter descriptions visible for tools without schemas. Error handling and output schemas are not documented. The codebase shows sophisticated implementation (UUID validation, decimal arithmetic, scope checking) but this sophistication is not reflected in the tool definitions exposed to LLMs.
Add Usage
Consult Agent
Create Product
Create Salt Agent
Create Wallet
Delegate to Agent
Hand Back to Concierge
Hand Off to Agent
17 of 23 tools have NO visible input schema. LLMs cannot determine valid parameters or types.
Most tool descriptions are 10-20 characters ('Create Salt Agent', 'List Salt Agents'). These lack context for LLM selection, WHEN to use them, or what they return.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 33 | 2025-06-18+ | v2 |
Get Identity
Set Identity
List Products
List Salt Agents
Offer Hand-off Choices
Offer Product
Post Card
Report Progress
Request the Floor
Clears this identity's delivery preference for a room, reverting to the unwritten default (addressed, no keywords), same as never having set one.
Joins the Commons room by fetching its id from salt-api config and posting a join_public request. The response includes the flat chat_payload shape with commons_note.
Reads recent messages from a Salt chat by id -- the newest window, or after `last` (a message id already seen) for the next page. Works even without membership for an OPEN, PUBLIC room (no end-to-end encryption): salt-api serves those to any caller, keyless or not -- the one case a keyless connection genuinely CAN read chat content, because there's no encryption to read around. If the room turns out to be encrypted, its messages come back as PGP ciphertext this tool never attempts to decrypt -- it only returns a room's own wire text as-is, exactly as delivered.
Sets this identity's own delivery preference for a room. salt-api refuses (422) against an encrypted chat -- "Salt cannot read an encrypted room, so it cannot follow it for you" -- that error passes straight through unchanged.
Send Invoice
Update Card
Vague tool names like 'consult_agent', 'delegate_to_agent', 'report_progress', 'request_floor' do not clearly convey what happens when called. LLMs cannot distinguish between similar names without detailed descriptions (which are missing).
No output schemas documented for any tool. LLMs cannot plan downstream calls or extract required fields (e.g., agent_id, product_id) for chaining.
No error handling guidance visible. Tools marked DESTRUCTIVE (create_salt_agent, delegate_to_agent, etc.) lack confirmation patterns or recovery hints. Agents cannot distinguish retryable from fatal errors.