Connect your AI assistant to a
real business in 30 seconds
One hosted connector URL. 85 curated tools — 54 read-only + 31 write, grouped by MCP annotations — connect Claude, ChatGPT, Claude Code, or Cursor directly to CRM, payments, scheduling, website, and AI agents. OAuth with per-company binding — no API to learn, no keys to paste.
navigator.modelContext (W3C WebMCP). 455 verbs across 5 surfaces — same JSON-LD vocabulary as the connector, no API key needed for read-only public surfaces. See WebMCP docs.The verb-shape architecture
Most agent frameworks orchestrate (chain LLM calls). Solid# is the layer underneath — the safe-action substrate agents write to. Every one of the agent-attraction verbs across every business function has a SHAPE that matches how AI agents actually reason: observe → explain → preview → commit → receipt → revert. Every write emits an audit row. Whitelisted writes are revertible. Multi-tenant RLS enforces isolation at the database. That's ACID for AI agents — the missing infrastructure layer the labs are looking for.
Collapse 5-8 sub-queries into one tenant-scoped read
customer.full_contextpayment.full_historyorder.complete_fulfillment_statecontact.relationship_map
Causal chain that produced the current state
deal.explain_stage_changecrm.explain_contact_stateinventory.explain_stockoutaudit.explain_balance_change
Dry-run a write before commit — no side effects
payments.preview_refund_impactsubscription.preview_tier_changepricing.preview_margin_impactinventory.preview_allocation
Ranked next-actions with confidence + reason + sample_size
deal.suggest_next_actioncustomer.suggest_upsellinventory.suggest_reorderlead.suggest_assignment
ACID grouping over multi-step writes — rollback as a unit
transaction.starttransaction.appendtransaction.committransaction.abort
Cryptographic attestations on side-effecting writes
ucp.receipts.issuevoice.call_outboundvoice.send_sms
Single-action undo against whitelisted audit rows
audit.revert (NEW shape — v2.12)
Cursor-polling observe streams over the audit log
event.subscribeevent.pollevent.unsubscribeevent.list
Introspection — agent learns its own surface
agent.manifestvoice.translate_statusucp.recommendations
Agent reconstructs the chain of actions that led here
agent.trails.lookupagent.trails.chain
Per-verb reliability + agent track-record
agent.reliability.scoreboardagent.reputation.verbagent.reliability.needs_attention
Saved verb-chains + agent self-monitoring
agent.macros.executeagent.macros.registeragent.telemetry.status
The reasoning loop these shapes support
observe → explain → preview → commit (transaction / receipt) → revert if needed
An agent invoking a write verb gets back an audit_id. Pass that id to audit.revert and the action is undone (whitelisted handlers in the backend; unsupported types return a structured refusal with a machine-readable reason). Same architecture across every registered verb. This is what the labs (Anthropic / OpenAI / Cursor / Cognition) are looking for: a safe-action substrate where every write is auditable and (where applicable) reversible.
Write safety: view → preview → approve → publish → roll back
You control what an AI is allowed to do without a human. Every write is classified reversible or irreversible — and an irreversible action (a sent email/SMS, a charge) always says so up front and is never presented as undoable. Connections start read-only; granting write is an explicit opt-in on the consent screen.
Role-gated by default. A role without publish rights can propose changes but not commit them — the change parks in a review queue for an owner/admin to approve. Configure who can propose / approve / publish / roll back per company with roles_set. Review and act on the queue from the assistant (changes_list, changes_approve, changes_reject, changes_rollback) or from the Pending AI Changes screen in the dashboard — see every proposed diff, approve, or roll a published change back to its prior version.
One registry. Four sibling transports.
All verbs are declared once in services/agent_verb_manifest.py and auto-projected to four sibling transports. A backend CI test (test_sibling_transport_parity.py) enforces it: a verb visible on one is visible on all four unless the verb explicitly omits a surface. Different AI runtimes hit different transports; the shape contract stays the same.
solid verbs invoke
For AI agents in shells: Claude Code, Codex, Cursor terminal. npm i -g @solidnumber/cli
mcp/connector (hosted)
For AI assistants + editors: Claude, ChatGPT, Claude Code, Cursor. api.solidnumber.com/mcp/connector
navigator.modelContext
For in-browser AI agents: Claude.ai web, Chrome agent mode. Per-tenant scoped on every Solid# subdomain. /docs/webmcp
/.well-known/ucp
For AI buyer-agents: Gemini AI Mode, ChatGPT shopping. RFC 9421 ES256 signed. /docs/ucp
Add a verb once → all four transports light up within 5 minutes of the backend manifest update. The hosted connector dispatches in-process against the live registry — nothing to install, nothing to republish. This is the "Phase 5 unifier" architecture — declare-once, bridge-everywhere.
Connect your assistant — Claude, ChatGPT, or your editor
One hosted OAuth endpoint turns any MCP-capable assistant into an operator for one company. Add it as a custom connector, sign in, and pick the company to bind — the connection only ever acts on that tenant. 85 curated tools: the 54 read-only tools carry MCP read-only annotations, so clients like Claude run them with fewer approval prompts; the 31 write tools preview first and commit on confirm, and money actions require a human-typed approval phrase. Ask how_to in-session and the connector explains itself; run connection_self_check for a one-call diagnostic of auth, company binding, and tool health.
https://api.solidnumber.com/mcp/connectorClaude (claude.ai)
- Settings → Connectors → Add custom connector
- Paste the connector URL above
- Authorize (OAuth) and pick your company
- Grant read or read+write
ChatGPT
- Settings → Connectors (custom)
- Paste the connector URL above
- Authorize (OAuth) and pick your company
- Same verbs, same receipts as Claude
Claude Code / Cursor
- Add the connector (Step 2 below), or
solid context --claudefor full contextsolid ailaunches Claude/Gemini/Grok
Any MCP client works the same way — the connector implements the full OAuth handshake (RFC 7591 dynamic registration, RFC 8414/9728 metadata, PKCE) discoverable at /.well-known/oauth-protected-resource. For an in-browser agent on a Solid# tenant subdomain, WebMCP needs no setup at all.
Get your API key
Sign up for free developer access. Your login is what the connector's OAuth binds to — plus you get a sandbox company and scoped API keys for the REST API and CLI.
npx @solidnumber/cli auth loginConnect your editor
Same connector URL everywhere. OAuth opens in the browser on first use — sign in, pick the company to bind, grant read or read+write. No API keys to paste, nothing to install, always the live tool surface.
# One command — OAuth opens in the browser, pick your company
claude mcp add --transport http solidnumber https://api.solidnumber.com/mcp/connector{
"mcpServers": {
"solidnumber": {
"url": "https://api.solidnumber.com/mcp/connector"
}
}
}{
"mcpServers": {
"solidnumber": {
"type": "http",
"url": "https://api.solidnumber.com/mcp/connector"
}
}
}The hosted connector (api.solidnumber.com/mcp/connector) is Solid#'s MCP surface of record — 85 curated tools that dispatch in-process with real tenant context. It replaces the earlier raw API-mirror stdio server, which is retired. For raw-endpoint or engineering work, use the REST API with a bearer token or the solid CLI instead.
Start building
Just talk to your assistant. The AI already understands every tool.
"How's the business — what should I do today?"
get_business_briefing→Tasks, deals, calls, revenue + ranked recommended actions in one call
"Text Maria a payment link for $299"
create_payment_link → send_payment_link→Hosted checkout link, sent by SMS — write tools confirm first
"Tell me everything about John Peterson"
get_customer_360→Contact, deals, appointments, payments, and calls for one person
"Why is this connection acting up?"
connection_self_check→One-call diagnostic — auth, company binding, tool health
"Generate a 5-page website for a plumber"
generate_website→Builds pages from the industry KB template as drafts
85 Curated Tools, 6 Categories
How It Works
Your Assistant
Claude, ChatGPT, Claude Code, or Cursor. You type natural language. The AI picks the right MCP tool automatically.
Hosted Connector
85 curated tools (54 read-only + 31 write) dispatching in-process against the 631-verb registry. OAuth auth, bound to one company per connection.
Business Data
550 tables (446 with RLS), 14 trained AI agents + 116 background workers, CRM, payments, calendar, KB. Every tool operates on real data with full tenant isolation.
Three Transports, One Vocabulary
Solid# exposes the same JSON-LD verb registry over three transports. Pick the one that matches your runtime — the metadata and IRIs are identical.
MCP connector
85 toolsThis page. Add api.solidnumber.com/mcp/connector to any MCP client. OAuth, bound to one company, curated operator surface.
WebMCP
455 verbsEvery Solid# page registers its verbs via navigator.modelContext. 5 surfaces (public / dashboard / tenant-site / writes). W3C draft. docs.
UCP
capabilitiesSigned wire format for buyer-agents to discover and transact across Solid# tenants. RFC 9421 + AP2 payments. docs.
For external buyer agentsSource of truth: services/webmcp/tool_registry.py — one registry, three transports, identical IRIs at https://api.solidnumber.com/webmcp/tools/{name}.
Who Uses This
Freelance Developers
Build client businesses from your editor. Pull data, push changes, manage AI agents — all without leaving VS Code.
Free developer access
Agencies
Manage 50 client businesses from one MCP connection. Switch companies, deploy changes, monitor health — all from your terminal.
Multi-company support built in
AI Agent Builders
Build custom AI agents that use MCP tools to execute real business operations. Not a wrapper — closed-loop execution.
AI agents as reference implementations
Configuration
The connector itself needs zero configuration — OAuth handles identity and company binding. Driving the REST API or the solid CLI directly instead? These environment variables apply:
| Variable | Purpose | Default |
|---|---|---|
SOLID_API_KEY | Bearer token (scope-limited API key) | required |
SOLID_API_URL | Backend base URL | https://api.solidnumber.com |
BACKEND_URL | Alias for SOLID_API_URL (legacy) | — |
API_KEY | Alias for SOLID_API_KEY (legacy) | — |
The fastest way to get a scoped key without leaving the terminal — reuse it in your MCP config:
# install via brew (mac), scoop (windows), or npm (any)
brew install solidnumber/tap/cli
solid auth login
solid auth token create -n "MCP" -s kb:read,pages:write,agents:converse
# Paste the sk_solid_... value into SOLID_API_KEY in your MCP configTroubleshooting
\u203ANot sure what's wrong? Run connection_self_check first
\u203AConnector shows as disconnected or every call returns an auth error
\u203AWrite tools are refused
\u203AClaude asks for approval on every single call
\u203AThe connection acts on the wrong company
\u203ANeed a raw endpoint the curated tools don't cover
Discovery Surface
Solid# ships every machine-readable manifest an AI agent expects, per-tenant. Every `@id IRI is stable across the public site, the tenant CLI payload, MCP tool outputs, and on-disk `.claude/solid-context.jsonld. One graph, one identifier space.
/.well-known/agent.jsonAgent2Agent (A2A) protocol manifest — capabilities, skills, auth schemes.
/.well-known/ai-plugin.jsonOpenAI plugin manifest (+ anthropic-ai-plugin.json variant).
/.well-known/mcp.jsonMCP discovery manifest — connector URL, tool catalogue, auth schemes.
/.well-known/openapi.json1,944-endpoint OpenAPI spec.
/llms.txt + /llms-full.txtHand-curated platform summary for LLM crawlers. Per-tenant on every tenant host.
/ai.txtAI-crawler policy + endpoint directory (supported bots, rate limits, contact).
GET /api/v1/cli/context?format=jsonldSchema.org + solid:* typed graph of the tenant — walkable via solid graph.
/sitemap.xml + robots.txt497 URLs; explicit allow rules for GPTBot / Google-Extended / Claude-Web / Perplexity / Applebot.
Schema.org reuse where it fits (Organization, Service, Product, Article, WebPage, Offer). Solid#-specific types under solid:* (Agent, Chain, KnowledgeBaseEntry, Tier, Industry, Shelf, MCPTool). Contract-stable IRIs.
Security
Tenant Isolation
Every API call scoped to your company_id. RLS on 446 of 550 tables (100% of tenant-scoped tables). You can never see another company's data.
Scoped API Keys
26 granular scopes. Give a key only kb:read access, or full write. Keys are SHA-256 hashed at rest.
Vibe Safety
Every vibe action is reversible. No deletions, always rollback. Preview before apply.
Audit Trail
Every MCP tool call logged with who, what, when, and which company. Full accountability.
Your AI assistant already speaks MCP
One connector URL. 85 curated tools — 54 read-only + 31 consent-gated writes. Free developer access. Start managing real businesses from Claude, ChatGPT, or your editor.