Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Draft, publish, and manage your VeloCMS blog from Claude, Cursor, or any MCP client.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
VELOCMS_SITE_URL, VELOCMS_API_KEY「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"velocms": {
"command": "npx",
"args": [
"-y",
"@velocms/mcp"
],
"env": {
"VELOCMS_SITE_URL": "your-value",
"VELOCMS_API_KEY": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add velocms --env VELOCMS_SITE_URL=your-value --env VELOCMS_API_KEY=your-value -- npx -y @velocms/mcp動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"velocms": {
"command": "npx",
"args": [
"-y",
"@velocms/mcp"
],
"env": {
"VELOCMS_SITE_URL": "your-value",
"VELOCMS_API_KEY": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"velocms": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@velocms/mcp"
],
"env": {
"VELOCMS_SITE_URL": "your-value",
"VELOCMS_API_KEY": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月6日にチェック
レジストリ名はドメイン velocms.org で確認済みです(レジストリがドメインの所有を確認しています)
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:VELOCMS_SITE_URL, VELOCMS_API_KEY
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.1.3)がレジストリに届いたのは3 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Toggl 2.0
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
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.
Toggl 2.0 MCP server for tasks, projects, time entries, and workspace operations.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
An MCP server for VeloCMS — draft, edit, publish, and manage your blog (posts, media, comments, members, site settings) from Claude Code, Claude Desktop, Cursor, or any other MCP client.
It's a thin, typed wrapper around the VeloCMS Public API (https:// /api/v1, documented at /api/openapi on any VeloCMS site): every tool maps to one real API call, with Zod-validated inputs and readable errors — no scraping, no browser automation, just the platform's own supported REST API.
| Tool | What it does |
|---|---|
list_posts | List posts, paginated, optionally filtered by status (draft/published) |
get_post | Fetch a single post by ID, including its full content and SEO fields |
create_post | Create a new post (defaults to draft) |
update_post | Partially update an existing post — only the fields you pass change |
delete_post | Permanently delete a post |
publish_post | Set a post's status to published (stamps published_at) |
unpublish_post | Set a post's status back to draft |
list_media | List the media library, paginated, optionally filtered by MIME type |
list_comments | List comments, paginated, optionally filtered by post or moderation status |
moderate_comment | Set a comment's status to approved, pending, or spam |
list_members | List subscribers/readers (emails are masked, e.g. u***@example.com) |
get_site_settings | Read the blog's name, description, and feature flags |
Every tool ships a description an LLM can read to figure out when and how to use it — that's the point of MCP, not just a REST proxy with extra steps. See Tool reference below for full argument lists.
In your VeloCMS dashboard: Settings → API Keys → create a key with the scopes you need (posts:read, posts:write, media:read, comments:read, comments:moderate, members:read, site-settings:read, etc.). API access requires the Pro plan or higher.
You don't need to clone this repo — npx fetches and runs it on demand.
claude mcp add velocms \
--env VELOCMS_SITE_URL=https://myblog.velocms.org \ --env VELOCMS_API_KEY=velo_your_64_char_hex_key_here \ -- npx -y -p @velocms/mcp velocms-mcp
MCP servers register their tools at session start, so restart your Claude Code session after adding this.
Add to your claude_desktop_config.json (Settings → Developer → Edit Config):
{
"mcpServers": { "velocms": { "command": "npx", "args": ["-y", "-p", "@velocms/mcp", "velocms-mcp"], "env": { "VELOCMS_SITE_URL": "https://myblog.velocms.org", "VELOCMS_API_KEY": "velo_your_64_char_hex_key_here" } } } }
Restart Claude Desktop after editing.
Same shape as above — point the client's MCP config at npx -y -p @velocms/mcp velocms-mcp with VELOCMS_SITE_URL and VELOCMS_API_KEY set in its env. The server speaks standard MCP over stdio, so any client that supports stdio MCP servers works.
git clone https://github.com/VeloCMS/velocms-mcp.git
cd velocms-mcp npm install npm run build cp .env.example .env
VELOCMS_SITE_URL=... VELOCMS_API_KEY=... node dist/index.js
| Env var | Required | Description |
|---|---|---|
VELOCMS_SITE_URL | yes | Your blog's base URL — a *.velocms.org subdomain or a bound custom domain. No trailing slash needed. |
VELOCMS_API_KEY | yes | An API key from /admin/settings → API Keys. Requires Pro plan or higher. Never logged. |
If either is missing, the server prints a clear message to stderr and exits immediately (process.exit(1)) — it never starts half-configured.
Argument names are camelCase; the server maps them to the API's snake_case JSON fields for you.
`list_posts` — page?, perPage? (max 100), status? (draft | published).
`get_post` — id (required).
`create_post` — title (required, ≤255 chars), slug?, contentHtml?, contentJson? (TipTap ProseMirror document — prefer contentHtml unless you need this), excerpt? (≤500), status? (draft default | published), tags? (string array), seoTitle? (≤60), seoDescription? (≤160).
`update_post` — id (required) + any of the create_post fields (all optional here). At least one field besides id is required — the tool rejects a no-op call before making any network request.
`delete_post` — id (required). Permanent.
`publish_post` / `unpublish_post` — id (required). Shorthand for update_post({ status: "published" }) / update_post({ status: "draft" }).
`list_media` — page?, perPage?, type? (MIME type prefix, e.g. "image").
`list_comments` — page?, perPage?, postId?, status? (approved | pending | spam).
`moderate_comment` — id (required), status (required: approved | pending | spam).
`list_members` — page?, perPage?, tier? (free | paid).
`get_site_settings` — no arguments.
The VeloCMS API returns a consistent JSON error envelope:
{ "error": { "code": "RATE_LIMITED", "message": "...", "details": {} } }
This client surfaces that message directly (never a raw stack trace), enriched with actionable hints:
UNAUTHORIZED) — the message tells you to check VELOCMS_API_KEY.PLAN_UPGRADE_REQUIRED) — the message points at /admin/billing.INVALID_SCOPE/FORBIDDEN) — the message tells you to check the key's scopes.RATE_LIMITED) — the Retry-After response header (seconds) is parsed and included in the error message, and returned as retryAfterSeconds if you're calling the client library directly.code + message are surfaced as-is.Rate limits are plan-based (Pro: 30/min, 1,000/hr · Business: 120/min, 5,000/hr · Agency: 300/min, 20,000/hr) — this server does not retry automatically; it fails fast with the wait time so an interactive tool call never blocks silently.
list_members are masked by the API itself (e.g. u***@example.com) — this server never sees or handles unmasked member PII.get_site_settings by the API — there is no way to read them through this server.PATCH /api/v1/comments/{id}/moderate takes { "status": "approved" | "pending" | "spam" } per the API's own schema, so the tool's input is named to match.{ "data": ... }) — only the write endpoints (create_post, update_post, moderate_comment) wrap their response, matching the API's own inconsistency here (documented in openapi.yaml).upload_media tool — POST /api/v1/media takes multipart/form-data, which doesn't map cleanly onto typical MCP client transports. list_media is available for referencing media already uploaded through the dashboard. Contributions welcome if you need this.npm install
npm run typecheck # tsc --noEmit npm test # vitest — all tests run against a mocked fetch, no live API calls npm run build # emits dist/
The test suite covers: the Authorization: Bearer header on every request, each tool's exact method/URL/body mapping, error-code mapping for 401/403/429/500 responses, and the missing-env-var fail-fast path. No test in this repository makes a real network call.
MIT — see LICENSE.