@motiblog/mcp 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -0
- package/package.json +3 -1
package/README.md
CHANGED
|
@@ -147,6 +147,79 @@ node -e "console.log(Object.keys(require('@motiblog/mcp')))"
|
|
|
147
147
|
MOTIBLOG_HTTP_PORT=3098 node_modules/.bin/motiblog-mcp-http
|
|
148
148
|
```
|
|
149
149
|
|
|
150
|
+
## Listing in the official MCP Registry
|
|
151
|
+
|
|
152
|
+
`server.json` in this directory is the listing, validated against schema
|
|
153
|
+
`2025-12-11`. The registry is the canonical directory since 2026 and downstream
|
|
154
|
+
directories and newsletters ingest it, so **one publish propagates** — do this
|
|
155
|
+
before filling in any individual directory form.
|
|
156
|
+
|
|
157
|
+
### The namespace
|
|
158
|
+
|
|
159
|
+
`server.json` claims `ai.motiblog/mcp` — the reverse-DNS namespace for a domain
|
|
160
|
+
we own, which is the identity a product should have rather than a personal
|
|
161
|
+
GitHub handle. Claiming it means proving control of `motiblog.ai`.
|
|
162
|
+
|
|
163
|
+
**The keypair is already generated and the proof is already deployed.** The
|
|
164
|
+
public half is served from the web app at
|
|
165
|
+
[`/.well-known/mcp-registry-auth`](../web/src/app/.well-known/mcp-registry-auth/route.ts);
|
|
166
|
+
the private half is at `~/.motiblog/mcp-registry-key` (mode 600, never in the
|
|
167
|
+
repo, same convention as the agent API key).
|
|
168
|
+
|
|
169
|
+
HTTP verification was chosen over the DNS TXT record deliberately: it lives in
|
|
170
|
+
this repository, so the proof is reviewable, versioned and deploys with the app
|
|
171
|
+
instead of depending on a registrar dashboard nobody remembers the login for.
|
|
172
|
+
The registry accepts either, with the same key — if you ever prefer DNS, the
|
|
173
|
+
record is:
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
motiblog.ai. IN TXT "v=MCPv1; k=ed25519; p=<the same public key>"
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Publishing
|
|
180
|
+
|
|
181
|
+
`mcp-publisher` is a Go binary from
|
|
182
|
+
[github.com/modelcontextprotocol/registry releases](https://github.com/modelcontextprotocol/registry/releases)
|
|
183
|
+
(v1.8.1 at time of writing) — it is not on npm.
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
cd apps/mcp
|
|
187
|
+
mcp-publisher login http \
|
|
188
|
+
--domain motiblog.ai \
|
|
189
|
+
--private-key "$(cat ~/.motiblog/mcp-registry-key)"
|
|
190
|
+
mcp-publisher publish
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
The web app must be deployed with the well-known route before the login will
|
|
194
|
+
verify — the registry fetches `https://motiblog.ai/.well-known/mcp-registry-auth`
|
|
195
|
+
and checks the signature against it. Confirm it is live first:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
curl https://motiblog.ai/.well-known/mcp-registry-auth
|
|
199
|
+
# v=MCPv1; k=ed25519; p=...
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
**If you rotate the key**, the constant in the route and the DNS record (if one
|
|
203
|
+
exists) must change together. A mismatch fails with a signature error that does
|
|
204
|
+
not explain itself.
|
|
205
|
+
|
|
206
|
+
Validate before publishing — the registry rejects on schema, and the limits
|
|
207
|
+
are tighter than they look (`description` caps at **100 characters**, which
|
|
208
|
+
the first draft of ours blew past):
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
python3 - <<'PY'
|
|
212
|
+
import json, urllib.request, jsonschema
|
|
213
|
+
s = json.load(urllib.request.urlopen(json.load(open('server.json'))['$schema']))
|
|
214
|
+
jsonschema.validate(json.load(open('server.json')), s)
|
|
215
|
+
print('valid')
|
|
216
|
+
PY
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
**Updating a listing needs a new version.** Bump `version` in both
|
|
220
|
+
`package.json` and `server.json` whenever the copy or the package changes, or
|
|
221
|
+
the publish is a no-op.
|
|
222
|
+
|
|
150
223
|
## Entry points
|
|
151
224
|
|
|
152
225
|
| File | Shape | Use |
|
package/package.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@motiblog/mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"//mcpName": "Links this npm package to its official MCP Registry entry. The registry refuses to publish a listing that names an npm package which does not point back at it — that pairing is how it proves the same owner controls both. Must equal `name` in server.json.",
|
|
5
|
+
"mcpName": "ai.motiblog/mcp",
|
|
4
6
|
"description": "MotiBlog MCP server — run a whole blog from an agent: propose topics, generate, fact-check, approve through a governed gate, publish, or export to your own codebase",
|
|
5
7
|
"license": "UNLICENSED",
|
|
6
8
|
"homepage": "https://motiblog.ai/mcp",
|