Skip to content

Commit 44eb807

Browse files
docs(mcp): add server.json + MCP Registry publish guide
DeckForge is currently listed on Glama (Whatsonyourmind/deckforge) but NOT on the MCP Registry (0 entries in search 2026-04-20). The npm names 'deckforge-mcp', '-team-mcp', '-analytics-mcp' are owned by a different publisher (crawde / DeckForgeAI), so a scoped name or PyPI route is required for the user's own distribution. server.json declares both install paths: - pypi:deckforge (pip install + python -m deckforge.mcp.server) - remote streamable-http at deckforge-api.onrender.com/v1/mcp (no install) docs/MCP_REGISTRY_PUBLISH.md documents: - Current per-directory status (Glama ok, MCP Registry missing, Smithery + MCP.so unverified from 17d-old memory claims) - PyPI publish command (requires PYPI_API_TOKEN in ~/.claude/secrets/) - mcp-publisher install + GitHub auth + publish flow - Path to fix Glama's 'tools: []' (inspector can't boot server w/o API keys) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 4c066eb commit 44eb807

2 files changed

Lines changed: 146 additions & 0 deletions

File tree

docs/MCP_REGISTRY_PUBLISH.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# Publishing DeckForge to the MCP Registry
2+
3+
## Status (2026-04-20)
4+
5+
| Directory | Status | URL |
6+
|-----------|--------|-----|
7+
| Glama | ✅ LIVE | https://glama.ai/mcp/servers/kkev9cu5yw (Whatsonyourmind/deckforge) |
8+
| MCP Registry | ❌ NOT LISTED ||
9+
| Smithery | ❓ Unverified (17d-old memory claims published under `lukastan/deckforge` but that namespace errors on Glama) |
10+
| MCP.so | ❓ Unverified |
11+
12+
## Why deckforge-mcp on npm is a no-go
13+
14+
The `deckforge-mcp`, `deckforge-team-mcp`, and `deckforge-analytics-mcp` npm packages are owned by **another publisher** (`crawde` / DeckForgeAI — a different company). They were first to the name. Publishing under a scoped name like `@lukastan/deckforge-mcp` is possible but less discoverable.
15+
16+
DeckForge's own MCP server is **Python/FastMCP** (not Node.js) — so the natural distribution path is PyPI + the MCP Registry's `registryType: pypi`.
17+
18+
## Publishing steps
19+
20+
### 1. Publish DeckForge to PyPI first
21+
22+
The MCP Registry references a PyPI package identifier. PyPI name `deckforge` appears to be available (returns 404 on pypi.org).
23+
24+
```bash
25+
# From SlideMaker repo root
26+
python -m pip install --upgrade build twine
27+
python -m build
28+
python -m twine upload dist/* \
29+
--username __token__ \
30+
--password <PYPI_API_TOKEN>
31+
```
32+
33+
Store the token in `C:/Users/lukep/.claude/secrets/pypi.env` (gitignored) as `PYPI_API_TOKEN=pypi-...`.
34+
35+
### 2. Submit to MCP Registry
36+
37+
Install the publisher:
38+
39+
```bash
40+
# Linux/macOS: curl install; Windows/Git Bash: download from releases
41+
curl -L https://github.com/modelcontextprotocol/registry/releases/latest/download/mcp-publisher_$(uname -s | tr A-Z a-z)_amd64.tar.gz | tar -xz
42+
```
43+
44+
Authenticate (JWT lasts ~24h, must re-auth each release):
45+
46+
```bash
47+
./mcp-publisher login github
48+
```
49+
50+
Publish:
51+
52+
```bash
53+
cd "C:/Users/lukep/Desktop/Projects AI/SlideMaker"
54+
./mcp-publisher publish
55+
```
56+
57+
The `server.json` at the repo root (already created) handles the rest. It declares:
58+
- `pypi:deckforge` for local install (`pip install deckforge`, then `python -m deckforge.mcp.server`)
59+
- `remote: streamable-http` at `https://deckforge-api.onrender.com/v1/mcp` — no-install option
60+
61+
### 3. Re-verify Smithery + MCP.so
62+
63+
Two directories claimed in 17-day-old memory but never verified:
64+
65+
- **Smithery**: go to https://smithery.ai and search `deckforge`. If missing, submit via their "Add server" flow pointing to `github.com/Whatsonyourmind/deckforge` with `server.json` at the root.
66+
- **MCP.so**: go to https://mcp.so and search. If missing, submit via their form.
67+
68+
### 4. Glama tool inspection (bonus)
69+
70+
Glama listing shows `tools: []` — likely because the Python server needs env vars to boot, so their inspector can't walk the tool list. Two options:
71+
72+
- Add an optional `--dry-run` flag to `deckforge.mcp.server` that starts the server with in-memory stubs so Glama's inspector can enumerate tools
73+
- Or host a public streamable-http endpoint at `deckforge-api.onrender.com/v1/mcp` (already declared in server.json) and point Glama there via the "remote server URL" field on its dashboard
74+
75+
Either path unlocks a B+ → A rating.

server.json

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
{
2+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3+
"name": "io.github.Whatsonyourmind/deckforge",
4+
"description": "Generate executive-ready presentations from natural language or JSON IR. 32 slide types (23 universal + 9 finance), 24 chart types, 15 themes, native PPTX + Google Slides output. MCP tools: render, generate, list themes, list slide types, estimate cost, preview. Remote streamable-http endpoint available.",
5+
"repository": {
6+
"url": "https://github.com/Whatsonyourmind/deckforge",
7+
"source": "github"
8+
},
9+
"version": "0.1.0",
10+
"packages": [
11+
{
12+
"registryType": "pypi",
13+
"identifier": "deckforge",
14+
"version": "0.1.0",
15+
"transport": {
16+
"type": "stdio"
17+
},
18+
"runtimeArguments": [
19+
{
20+
"type": "positional",
21+
"value": "-m",
22+
"valueHint": "module"
23+
},
24+
{
25+
"type": "positional",
26+
"value": "deckforge.mcp.server",
27+
"valueHint": "entrypoint"
28+
}
29+
],
30+
"environmentVariables": [
31+
{
32+
"name": "DECKFORGE_ANTHROPIC_API_KEY",
33+
"description": "Anthropic API key for Claude content generation (one LLM key required)",
34+
"isRequired": false,
35+
"isSecret": true
36+
},
37+
{
38+
"name": "DECKFORGE_OPENAI_API_KEY",
39+
"description": "OpenAI API key for content generation",
40+
"isRequired": false,
41+
"isSecret": true
42+
},
43+
{
44+
"name": "DECKFORGE_GEMINI_API_KEY",
45+
"description": "Google Gemini API key",
46+
"isRequired": false,
47+
"isSecret": true
48+
},
49+
{
50+
"name": "DECKFORGE_DATABASE_URL",
51+
"description": "PostgreSQL connection string (defaults to SQLite for dev)",
52+
"isRequired": false,
53+
"isSecret": false
54+
},
55+
{
56+
"name": "DECKFORGE_REDIS_URL",
57+
"description": "Redis URL for queue + cache (default redis://localhost:6379/0)",
58+
"isRequired": false,
59+
"isSecret": false
60+
}
61+
]
62+
}
63+
],
64+
"remotes": [
65+
{
66+
"type": "streamable-http",
67+
"url": "https://deckforge-api.onrender.com/v1/mcp",
68+
"description": "Remote MCP endpoint — production API on Render. No local install needed; point your MCP client here."
69+
}
70+
]
71+
}

0 commit comments

Comments
 (0)