eddyter-mcp
v0.1.4
Published
Model Context Protocol server for Eddyter — let your AI agent set up and configure the Eddyter editor.
Readme
Eddyter MCP Server
A Model Context Protocol server that lets AI tools (Claude Desktop, Cursor, Windsurf, …) inspect and — in later steps — configure the Eddyter editor on an admin's behalf.
This is the admin-side surface: the account owner connects it to their AI tool using a license key. Changes made through it apply to every end-user of the editor that uses that key, with no redeploy (config lives server-side on the key).
Tools
Reads are always available. The config-changing tool is opt-in
(EDDYTER_ALLOW_WRITES=true) so a pasted key can't change the live editor unless
the admin allows it.
| Tool | Mode | What it does |
| --- | --- | --- |
| verify_status | read | Is the key valid/active? Plan, expiry, subscription, BYOK, warnings. |
| get_config | read | Which editor features are enabled, off-but-allowed, or locked by plan. |
| get_usage | read | Credits remaining, usage this period, days until reset. |
| get_integration_snippet | read | SSR-safe copy-paste setup code per framework. |
| update_config | write (opt-in) | Patch the editor's features (e.g. turn AI chat off). Clamped to the plan; live with no redeploy. |
Backend: reads ride the public /api/license/validate; get_usage and
update_config use the X-API-Key endpoints GET /api/license/usage and
POST /api/license/config.
Setup
pnpm install
pnpm buildGet a license key from the dashboard: https://www.eddyter.com/user/license-key (The MCP never creates keys — humans mint them in the portal.)
Connect to Claude Desktop
Add to claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": {
"eddyter": {
"command": "node",
"args": ["/absolute/path/to/apps/mcp/dist/index.js"],
"env": {
"EDDYTER_LICENSE_KEY": "eddyt_your_key_here"
}
}
}
}Connect to Cursor
.cursor/mcp.json in your project, same command / args / env shape.
Then ask the agent: "Is my Eddyter key valid?" or "What editor features do I have enabled?"
Configuration
| Env var | Default | Purpose |
| --- | --- | --- |
| EDDYTER_LICENSE_KEY | — | Key the agent acts on. Optional if passed per tool call. |
| EDDYTER_ENV | production | production | staging | local. |
| EDDYTER_API_BASE_URL | — | Advanced override of the backend base URL. |
| EDDYTER_ALLOW_WRITES | false | Set true to expose update_config (lets the agent change the live editor). |
Develop & test
pnpm dev # tsc --watch
pnpm inspect # open the MCP Inspector against this serverQuick manual smoke test (no real key needed — exercises the live error path):
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"0"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized"}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \
| node dist/index.jsNotes
- Logs go to stderr — stdout is the JSON-RPC channel and must stay clean.
- Feature labels surfaced by
get_configlive insrc/format.ts(FEATURE_LABELS) — tune names/ordering there to match the marketing site.
