Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
Live transits, ESMS ingredients, cosmic recipes, synastry & transit×natal overlays by alchm.kitchen
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
MCP_USER_API_KEY, DATABASE_URLValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"alchm-kitchen": {
"command": "npx",
"args": [
"-y",
"@alchm/mcp-server"
],
"env": {
"MCP_USER_API_KEY": "your-value",
"DATABASE_URL": "your-value"
}
}
}
}Run this in your terminal
claude mcp add alchm-kitchen --env MCP_USER_API_KEY=your-value --env DATABASE_URL=your-value -- npx -y @alchm/mcp-serverFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"alchm-kitchen": {
"command": "npx",
"args": [
"-y",
"@alchm/mcp-server"
],
"env": {
"MCP_USER_API_KEY": "your-value",
"DATABASE_URL": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"alchm-kitchen": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@alchm/mcp-server"
],
"env": {
"MCP_USER_API_KEY": "your-value",
"DATABASE_URL": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 7, 2026
The registry name was verified with the GitHub account gregcastro23, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: MCP_USER_API_KEY, DATABASE_URL
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (1.1.1) reached the registry 5 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, First Sale Scout
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Playbooks and a 14-day checklist for founders winning their first paying customers.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
Version 1.4.0 exposes eight tools over stdio: live transits, curated ingredient analysis, recipe search, natal overlays, triplicate pricing, evidence snapshots and recipe reflections. It uses the maintained MCP TypeScript SDK v1 line and supports existing MCP initialization handshakes. It does not expose an HTTP/SSE server.
bunx @alchm/mcp-server
npx -y @alchm/mcp-server
bun install --cwd mcp-server bun run mcp-server/src/index.ts
bun run --cwd mcp-server build bun run --cwd mcp-server build:binary
The bundle is mcp-server/dist/index.js; the sidecar is mcp-server/bin/alchm-mcp. The binary build disables working-directory dotenv/bunfig autoloading and repairs/verifies its ad-hoc signature on macOS. Building prepares local artifacts; publishing npm, registry metadata and sidecar releases are separate release steps.
| Tool | Authenticated cost | Behavior |
|---|---|---|
get_live_sky_transits | Free | Current planetary positions and elemental balance for an observer. |
alchemize_ingredients | Free | Curated elemental/ESMS data and thermodynamic indices for up to 100 ingredients. Missing ESMS quantities remain null. |
generate_cosmic_recipe | 2.5 of each ESMS (10 total) | Search the whole recipe catalog by keywords, element, cuisine and diet. Returns 5 matches by default; limit and offset (no maximum) page through every match. Charged only when the search succeeds. |
compute_synastry_overlay | Free | Inter-chart aspects, scores and stance. cacheStrategy: "write" updates the optional database cache and requires a matching internal probe secret. |
get_transit_natal_overlay | Free | Sky-to-natal aspects and continuous per-element boosts for one agent. |
compute_triplicate_synastry | Free | Quote resonance, potential rebates and a cooldown window key; does not execute a trade or pay a rebate. |
create_evidence_snapshot | 2.5 of each ESMS (10 total) | Bundle transits, optional ingredients and recipe candidates in one call. Charged only for a complete snapshot. |
submit_recipe_reflection | 0.1 of each ESMS (0.4 total) | Save a proposed reflection and its debit in one transaction, then attempt feed publication; requires an authenticated, non-synthetic caller. |
Anonymous callers can use read tools in demo mode. Recipe search and evidence snapshots debit authenticated callers; reflection publication requires authentication. Invalid supplied credentials are rejected. An operator must configure DATABASE_URL to validate API keys and apply billing. An API key alone does not connect this stdio process to a hosted authentication service.
Tool annotations identify paid calls and reflection publication as mutations. The catalog declares bounded inputs; validation runs before authentication, billing and handler work. Coordinates must be within latitude/longitude bounds, ingredient lists contain 1–100 strings, reflections are 1–4000 characters (the stored column's limit), and natal charts/amounts/timestamps must match their published schema.
Paid reads are charged on delivery: the tool runs first, and only a successful result is settled. A failed search or a partial snapshot (an error) is never charged, a caller that cancels before settlement is not charged, and a refused settlement withholds the result (QUOTA, or UNAVAILABLE when billing cannot be reached). A reflection's debit and its recipe_reflections row commit in one transaction, so a caller is never charged for a reflection that was not stored. Feed publication runs inside the same transaction behind a savepoint: if it fails, the reflection and its charge stand and the receipt reports published: false.
Without an idempotency key every call charges again and every reflection call stores another reflection. Pass _meta.idempotencyKey (1–200 characters from A-Z a-z 0-9 . _ : ~ -) to make a paid call safe to retry:
billing.status: "replayed"). A recipe search or snapshot is recomputed, so a replayed snapshot carries a new snapshotId and observation time; a reflection retry returns the stored reflection (replayed: true) and re-attempts a feed publication that previously failed, unless the reflection has since been moderated (hidden, deleted or rejected).CONFLICT. Credentials and correlation fields in _meta are not part of the comparison.Once a paid call reaches settlement, its result reports what happened in a billing field (errors before that point, such as invalid arguments, authentication failures or BUSY, carry none): status (charged, replayed or not_charged, with a reason such as anonymous-caller, synthetic-probe-exempt or not-delivered), the amounts debited by this call, and the echoed idempotencyKey.
Results include both structuredContent and the same JSON serialized in a text content block, with a correlationId. Every tool publishes an outputSchema that accepts its success payload or the shared error envelope, so clients that validate structured results (the TypeScript and Python SDK clients do) accept both. Failed evidence snapshots retain available data and component provenance under the error payload's data field. Tool failures set isError: true with a stable errorCode and message; RATE_LIMIT and BUSY include retryAfterSec. Diagnostic output goes to stderr; stdout contains JSON-RPC messages only. SIGINT, SIGTERM and stdin closure perform a bounded one-second telemetry drain before exit.
ALCHM_MCP_BACKEND_URL=https://alchm.kitchen
MCP_USER_API_KEY=sk_alchm_...
DATABASE_URL=postgresql://... # operator-only: key validation, billing, cache and telemetry
Chart/transit requests POST to /api/astrologize. Explicit ALCHM_MCP_BACKEND_URL, NEXT_PUBLIC_SITE_URL, SITE_URL or Vercel URL settings take precedence. Bundled/compiled artifacts default to https://alchm.kitchen; source runs default to http://localhost:3000. Source development therefore needs the local app running or an explicit reachable backend URL.
Mint and revoke API keys at /profile/api-keys. Keys are stored as SHA-256 hashes; plaintext is shown once when created.
Every tool accepts _meta inside its arguments:
{
"name": "generate_cosmic_recipe", "arguments": { "prompt": "spicy", "cuisine": "thai", "_meta": { "apiKey": "sk_alchm_live_REPLACE_ME", "caller": "claude-desktop", "correlationId": "dinner-plan-123", "idempotencyKey": "dinner-plan-123-search" } } }
The environment key supplies a default for single-user installs. Legacy _meta.authKey, _authKey and _apiKey argument aliases remain supported. Synthetic probes supply _meta.internalSecret matching the server's INTERNAL_API_SECRET; SYNTHETIC_PROBE_USER_ID is optional attribution. Setting the server secret alone never authenticates an external call as a probe. Synthetic calls cannot publish reflections.
Use the same mcpServers configuration shape in Claude Desktop's claude_desktop_config.json or Cursor's .cursor/mcp.json:
{
"mcpServers": { "alchm-kitchen": { "command": "npx", "args": ["-y", "@alchm/mcp-server"], "env": { "MCP_USER_API_KEY": "sk_alchm_live_REPLACE_ME" } } } }
For a local source checkout use "command": "bun" and "args": ["run", "/absolute/path/to/WhatToEatNext-master/mcp-server/src/index.ts"]. Database configuration belongs to the operator running the server. See the source-run templates in claude-desktop.config.example.json and cursor.mcp.example.json.
bun run --cwd mcp-server typecheck
bun run jest src/lib/mcp/tests/ --runInBand bun run --cwd mcp-server test:stdio MCP_E2E=1 MCP_E2E_ENTRY=mcp-server/dist/index.js bun test mcp-server/src/tests/ MCP_E2E=1 MCP_E2E_ENTRY=mcp-server/bin/alchm-mcp bun test mcp-server/src/tests/
The stdio tests spawn real source/bundle/binary processes, initialize a session, send notifications/initialized, inspect all eight tools, call local tools, and exercise validation and errors. They reject any non-JSON-RPC stdout line and do not require a live database or production backend. sdkClient.test.ts repeats the calls through the official SDK client, which validates every result, errors included, against the advertised outputSchema.
Settlement has a real-PostgreSQL proof: src/lib/mcp/__tests__/settlement.postgres.test.ts runs the ledger, idempotent replay, concurrent retries and the reflection transaction (including recovery from a failed feed insert) against a disposable database holding every migration. Its header lists the setup; it is skipped unless MCP_TEST_DATABASE_URL names a loopback mcp_test* database.
Database-backed invocations feed mcp_invocations, the admin MCP status surface, agent telemetry and the synthetic MCP probe. Telemetry is best effort; calls still work when logging is unavailable. Retention is seven days via the observability prune job. Per-key rate limits and a four-call process concurrency cap bound workload; calls receive a cancellation signal after 20 seconds and receive MCP cancellation signals. A timeout does not guarantee that already-started downstream side effects have rolled back.
See ARCHITECTURE.md for ownership and data flow.