sedes-mcp
v1.2.1
Published
MCP server for US LLC formation — which state to form in, formation quotes with real state filing fees, and direct checkout links. Standalone: no API keys, no database, no runtime network calls.
Maintainers
Readme
sedes-mcp
An MCP server for US LLC formation. Tells you which state to form in, prices it with the real government filing fee itemised, and hands back a checkout link.
No API key. No account. No configuration. Works over stdio and HTTP.
Install
Claude Desktop, Cursor, Windsurf, Zed — stdio
{
"mcpServers": {
"sedes": { "command": "npx", "args": ["-y", "sedes-mcp"] }
}
}- Claude Desktop — Settings → Developer → Edit Config
- Cursor —
~/.cursor/mcp.json - Windsurf —
~/.codeium/windsurf/mcp_config.json - Zed —
settings.jsonundercontext_servers
Nothing is installed; npx fetches and runs it. It lives only as long as the
client does, so there is no server to keep up.
ChatGPT, claude.ai, Copilot, Gemini — remote HTTP
These cannot spawn a local process, so they need a URL:
https://<your-deployment>/mcp- claude.ai — Settings → Connectors → Add custom connector
- ChatGPT — Settings → Connectors → Add
- Anything else that speaks Streamable HTTP
Claude Code
claude mcp add sedes -- npx -y sedes-mcp # stdio
claude mcp add --transport http sedes <url>/mcp # remoteTools
Start with sedes_plan_formation. It answers the whole question in one
call — which state, why, the exact price, and a checkout link. The rest are for
follow-ups.
| Tool | Use for |
|---|---|
| sedes_plan_formation | The common case, end to end |
| sedes_recommend_state | Which state, with reasoning |
| sedes_quote_formation | Exact price for one state |
| sedes_compare_states | "Wyoming vs Delaware" |
| sedes_list_tiers | What is on offer |
| sedes_checkout_link | A link once they have decided |
| sedes_compliance_requirements | Annual obligations, and what happens if ignored |
What it will tell you that a storefront will not
Most people should form in their own state. Forming in Wyoming while operating in California means registering as a foreign entity in California anyway: two filing fees, two annual reports, two registered agents. The tool says so, even though the home state is often the cheaper sale.
The year-two price, next to the year-one price. The industry pattern is a cheap first year and a renewal at two or three times the rate. Every quote includes what the renewal actually costs.
State fees are passed through at cost and shown on their own line. Sedes makes nothing on them.
What is not offered: nominee officers or managers, BOI filings (domestic US LLCs are exempt under the 2025 FinCEN rule), guaranteed bank accounts, or anonymity. Sedes is not a law firm and the tools say so.
Running it yourself
npm install && npm test # 71 assertions across both transports
npm run serve # http://localhost:8080/mcp
npm start # stdioDeploy the HTTP transport
npx wrangler login && npx wrangler deploy # Cloudflare Workersor any container host:
gcloud run deploy sedes-mcp --source . --region us-central1 --allow-unauthenticatedsrc/http.ts is written against web standards (Request → Response), so the
same handler runs on Workers, Deno, Vercel Edge, Bun and Node. src/node.ts is
a thin adapter for container hosts. Choosing a host is not a rewrite.
Design notes
Two transports, one server. stdio reaches only clients that can spawn a local process — ChatGPT, Gemini, Copilot and claude.ai cannot. The largest audience for "I want to start a company" is on the side stdio cannot reach, so shipping only an npm package would be shipping to the smaller half.
No authentication, deliberately. Every API key is a reason an integration never gets finished. There is nothing here worth protecting: the catalog is baked in at build time and checkout is a tokenless cart permalink. The zero-friction install is an advantage that is easy to throw away.
Stateless. No session generator. Serverless instances do not share memory, so a session held in one is invisible to the next — stateless is the only honest mode, and these tools are pure functions anyway.
It refuses rather than guesses. findState("") once returned Alabama,
because every string .startsWith("") — a checkout link requested without a
state would have quietly sold a $395 Alabama LLC. It now needs two characters
and an unambiguous prefix: wyo resolves, new does not, because New
Hampshire, New Jersey, New Mexico and New York are a coin flip dressed as an
answer. Both cases are pinned by regression tests.
Prices are asserted exactly in tests, never as "contains a $". A looser
test would have passed throughout the period when the public API told every
agent that formation cost $29 against a real price of $159.
Nothing writes. No tool creates an order, so none can charge anyone by accident.
Not implemented, deliberately
- Order status lookup — would need an authenticated API call, reintroducing a runtime dependency and a token to leak. Customers reply to their order email.
- Name availability — only the state decides, and a confident "available" the state later rejects is worse than not answering.
