{"_id":"@archy-ai/blog-post-mcp","_rev":"7-da77f5724687c7168994bf6b3cd900e8","name":"@archy-ai/blog-post-mcp","dist-tags":{"latest":"0.1.1"},"versions":{"0.0.1":{"name":"@archy-ai/blog-post-mcp","version":"0.0.1","keywords":["mcp","model-context-protocol","archy","blog","publisher"],"_id":"@archy-ai/blog-post-mcp@0.0.1","maintainers":[{"name":"architech_hr","email":"nenad.crncec@architech.hr"}],"homepage":"https://github.com/NenadCrncec/meet.archy-ai.com#readme","bugs":{"url":"https://github.com/NenadCrncec/meet.archy-ai.com/issues"},"bin":{"blog-post-mcp":"index.mjs","archy-blog-post-mcp":"index.mjs"},"dist":{"shasum":"70b298511520757e6bfaf6906fdb1c57aba0cf1f","tarball":"https://registry.npmjs.org/@archy-ai/blog-post-mcp/-/blog-post-mcp-0.0.1.tgz","fileCount":3,"integrity":"sha512-Vz5cvmOluJl2trEWEiFcrm8m5bECy0pkmw292x6uZUXoyvF93p+ZarszOO+NaitxZleAVMmPdAXBIhBSTlr59w==","signatures":[{"sig":"MEUCIQC+oTxt5ucfvZ01ycv2vAKFfmaUmDgIZN/7WBl9MJPi/QIgOKU3Y5CuMs/vEmNbVAdf3AMXKKQUIFYJWrxFTIjWNCc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20504},"type":"module","engines":{"node":">=20"},"gitHead":"2c94eea83fe6e02e99f9b19aa017cce00c5b7a82","_npmUser":{"name":"architech_hr","email":"nenad.crncec@architech.hr"},"repository":{"url":"git+https://github.com/NenadCrncec/meet.archy-ai.com.git","type":"git","directory":"tools/blog-post-mcp"},"_npmVersion":"10.9.3","description":"Standalone MCP server for publishing to Meet Archy blog APIs","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^4.1.5","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/blog-post-mcp_0.0.1_1773868619800_0.38664274800140386","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@archy-ai/blog-post-mcp","version":"0.0.2","_id":"@archy-ai/blog-post-mcp@0.0.2","maintainers":[{"name":"architech_hr","email":"nenad.crncec@architech.hr"}],"bin":{"archy-blog-post-mcp":"index.mjs"},"dist":{"shasum":"c16db2eb32e8b8755be95a5d3f1db45a1d6ac0b1","tarball":"https://registry.npmjs.org/@archy-ai/blog-post-mcp/-/blog-post-mcp-0.0.2.tgz","fileCount":3,"integrity":"sha512-2gt4GEsj1Q7BfFL82B0mDbfzXLof3y60Njo0nydajPelXBclAIDnx1wMPbt/F5YXmfoBNLWLMXvkA259JMzT1w==","signatures":[{"sig":"MEQCIDNtXIA1p4yYeWghpZyvUrglMeLBe1nwZ3nNG+i6eYMwAiASHvZYPsCAXwQJF6x241IPC/Pyiib9MvBDWJu1gM1GjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43182},"type":"module","engines":{"node":">=20"},"gitHead":"3ff0a472f736e1276be7ba11606c332e08cf0205","_npmUser":{"name":"architech_hr","email":"nenad.crncec@architech.hr"},"_npmVersion":"10.9.3","description":"Minimal MCP server that exposes tools to: - summarize the current git workspace changes - create/update/publish blog posts - trigger featured image / featured video generation via the existing Archy admin API","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^4.1.5","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/blog-post-mcp_0.0.2_1773932952275_0.24392239847897157","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@archy-ai/blog-post-mcp","version":"0.0.3","_id":"@archy-ai/blog-post-mcp@0.0.3","maintainers":[{"name":"architech_hr","email":"nenad.crncec@architech.hr"}],"bin":{"archy-blog-post-mcp":"index.mjs"},"dist":{"shasum":"e5bc2e029f5a052132a497cbfcb0b0f84c0fd72a","tarball":"https://registry.npmjs.org/@archy-ai/blog-post-mcp/-/blog-post-mcp-0.0.3.tgz","fileCount":3,"integrity":"sha512-M8sOXWAId3SKUIT3x6n3/giafIEH7CQIaBE84l1KYGqaqry4VFjWlzaz9WcDZ7oetdKqScDbIesABBr3IYhZow==","signatures":[{"sig":"MEUCIQCZr9QEmhzD537WQY5/XehTpTcbKRQCLnx0aaWu7wCI4wIgU/5lx/Bj/tN9OVyNhXwXz/HPeXr1WH86o3UtcpQE8Us=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46815},"type":"module","engines":{"node":">=20"},"gitHead":"3ff0a472f736e1276be7ba11606c332e08cf0205","_npmUser":{"name":"architech_hr","email":"nenad.crncec@architech.hr"},"_npmVersion":"10.9.3","description":"Minimal MCP server that exposes tools to: - summarize the current git workspace changes - create/update/publish blog posts - trigger featured image / featured video generation via the existing Archy admin API","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^4.1.5","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/blog-post-mcp_0.0.3_1774266265448_0.5689075030008564","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@archy-ai/blog-post-mcp","version":"0.0.4","_id":"@archy-ai/blog-post-mcp@0.0.4","maintainers":[{"name":"architech_hr","email":"nenad.crncec@architech.hr"}],"bin":{"archy-blog-post-mcp":"index.mjs"},"dist":{"shasum":"249e54c7208b40fe7821b122ec60ac79e8661994","tarball":"https://registry.npmjs.org/@archy-ai/blog-post-mcp/-/blog-post-mcp-0.0.4.tgz","fileCount":3,"integrity":"sha512-gcQPWMYbtK07F46MKuUCfAR367lywCBuL5mww3VdAV9HRk5fzG+7XVEnyBw0rw4osBAf0NZgR+6xoMhxl+lJ7g==","signatures":[{"sig":"MEYCIQC4N9lH8+uZWcwX9Q+2+qGaDsVyYySk5LpS5hM3/MBh/wIhAO3PYBd+30Jo5tq5pjvk1RqLEzZFVC39zG8ULklOVYwN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47124},"type":"module","engines":{"node":">=20"},"gitHead":"b163788f5b456c76a9518d11a62e74ce2209e4b3","_npmUser":{"name":"architech_hr","email":"nenad.crncec@architech.hr"},"_npmVersion":"10.9.3","description":"Minimal MCP server that exposes tools to: - summarize the current git workspace changes - create/update/publish blog posts - trigger featured image / featured video generation via the existing Archy admin API","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^4.1.5","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/blog-post-mcp_0.0.4_1777371478454_0.9050167218478766","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@archy-ai/blog-post-mcp","version":"0.0.5","_id":"@archy-ai/blog-post-mcp@0.0.5","maintainers":[{"name":"architech_hr","email":"nenad.crncec@architech.hr"}],"bin":{"archy-blog-post-mcp":"index.mjs"},"dist":{"shasum":"e7583afff770f420588e704a669d4dfd0fb03d24","tarball":"https://registry.npmjs.org/@archy-ai/blog-post-mcp/-/blog-post-mcp-0.0.5.tgz","fileCount":3,"integrity":"sha512-xrnlilrKbWaDiJOz01QET3lPUo3C/pN4pcEhzAJNPntdplIhWcBh50TUJMxKJBbFif6aYkKsL1toCZPP0aTgnQ==","signatures":[{"sig":"MEYCIQCsRZRLgmVAeNOGnyPOD5wfwmfw1s1aIRnetUuNIcPHQgIhAMMOE3jLf3C6aydWI+vPAmJlnz5xaJzQQR2k3tzMGH+r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60895},"type":"module","engines":{"node":">=20"},"gitHead":"48e3fe7a16b0921e318b0e298868110bd96e929d","_npmUser":{"name":"architech_hr","email":"nenad.crncec@architech.hr"},"_npmVersion":"10.9.3","description":"Minimal MCP server that exposes tools to: - summarize the current git workspace changes - create/update/publish blog posts - trigger featured image / featured video generation via the existing Archy admin API","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^4.1.5","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/blog-post-mcp_0.0.5_1777390959690_0.7631093326071012","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@archy-ai/blog-post-mcp","version":"0.1.0","keywords":["mcp","model-context-protocol","blog","cms","ai","publishing","claude","chatgpt","copilot","cursor"],"license":"MIT","_id":"@archy-ai/blog-post-mcp@0.1.0","maintainers":[{"name":"architech_hr","email":"nenad.crncec@architech.hr"}],"homepage":"https://github.com/architechcro/meet.archy-ai.com/tree/main/tools/blog-post-mcp","bugs":{"url":"https://github.com/architechcro/meet.archy-ai.com/issues"},"bin":{"archy-blog-post-mcp":"index.mjs","archy-blog-post-mcp-http":"http-server.mjs"},"dist":{"shasum":"6beaca640eb835e10b8cf55ae1f4ceed723b6487","tarball":"https://registry.npmjs.org/@archy-ai/blog-post-mcp/-/blog-post-mcp-0.1.0.tgz","fileCount":11,"integrity":"sha512-5QIGQ1mrV7UFj0nR8hgkNxiGLFsqPg8A5Gyj5cCsmtJR2gWm3QRnj62eFMETd+xtZklKHdlYmB2fF8/dMaiAeA==","signatures":[{"sig":"MEQCIF4t2wUoUiuRK1ebGVsdjH1bvaOPZcJio1gOqrSuTkJIAiBmykP7RTZDl9vmTTAeBxBx5d0JlGUueUM8p2kuq/L5ig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":89692},"type":"module","engines":{"node":">=20"},"gitHead":"2107096a2119349121df18bd92294f974ace549d","scripts":{"start":"node index.mjs","start:http":"node http-server.mjs","start:http:dev":"PORT=3100 ARCHY_MCP_DEBUG=1 node http-server.mjs"},"_npmUser":{"name":"architech_hr","email":"nenad.crncec@architech.hr"},"repository":{"url":"git+https://github.com/architechcro/meet.archy-ai.com.git","type":"git","directory":"tools/blog-post-mcp"},"_npmVersion":"10.9.3","description":"MCP server for AI-powered blog & page publishing on Archy. Works with Claude, ChatGPT, VS Code Copilot, Cursor, and any MCP-compatible client.","directories":{},"_nodeVersion":"22.20.0","dependencies":{"zod":"^4.1.5","@modelcontextprotocol/sdk":"^1.27.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/blog-post-mcp_0.1.0_1782980599833_0.6090594309038464","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@archy-ai/blog-post-mcp","version":"0.1.1","description":"MCP server for AI-powered blog & page publishing on Archy. Works with Claude, ChatGPT, VS Code Copilot, Cursor, and any MCP-compatible client.","type":"module","engines":{"node":">=20"},"bin":{"archy-blog-post-mcp":"index.mjs"},"scripts":{"start":"node index.mjs","start:http":"node http-server.mjs","start:http:dev":"PORT=3100 ARCHY_MCP_DEBUG=1 node http-server.mjs"},"keywords":["mcp","model-context-protocol","blog","cms","ai","publishing","claude","chatgpt","copilot","cursor"],"homepage":"https://github.com/architechcro/meet.archy-ai.com/tree/main/tools/blog-post-mcp","repository":{"type":"git","url":"git+https://github.com/architechcro/meet.archy-ai.com.git","directory":"tools/blog-post-mcp"},"license":"MIT","dependencies":{"@modelcontextprotocol/sdk":"^1.27.1","zod":"^4.1.5"},"publishConfig":{"access":"public"},"_id":"@archy-ai/blog-post-mcp@0.1.1","gitHead":"693a2d2946f81274f186065ed45bc9d86e923760","bugs":{"url":"https://github.com/architechcro/meet.archy-ai.com/issues"},"_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-JZMD+nz0h6RyLLkxV7wertnjfrMU1nJ3oZqR5O5gKE9ejNeZS+NmxM6hUqzHhTsevQQdFA1KtbpvGydcdTwSwQ==","shasum":"e94453fdddce4a46eabe66028958000f8c0fe9ee","tarball":"https://registry.npmjs.org/@archy-ai/blog-post-mcp/-/blog-post-mcp-0.1.1.tgz","fileCount":11,"unpackedSize":89645,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBt+dhok9xodhldvTUluY/8/zZVFNuK679fQmyfXLVRlAiEAybL2KEGF0NlIvtYVHEwGgXKIMIozBQmEq3/5lhWOUlc="}]},"_npmUser":{"name":"architech_hr","email":"nenad.crncec@architech.hr"},"directories":{},"maintainers":[{"name":"architech_hr","email":"nenad.crncec@architech.hr"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/blog-post-mcp_0.1.1_1782992756113_0.16231669128600124"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-18T21:16:59.605Z","modified":"2026-07-02T11:45:56.369Z","0.0.1":"2026-03-18T21:16:59.945Z","0.0.2":"2026-03-19T15:09:12.405Z","0.0.3":"2026-03-23T11:44:25.586Z","0.0.4":"2026-04-28T10:17:58.623Z","0.0.5":"2026-04-28T15:42:39.855Z","0.1.0":"2026-07-02T08:23:20.001Z","0.1.1":"2026-07-02T11:45:56.255Z"},"bugs":{"url":"https://github.com/architechcro/meet.archy-ai.com/issues"},"license":"MIT","homepage":"https://github.com/architechcro/meet.archy-ai.com/tree/main/tools/blog-post-mcp","keywords":["mcp","model-context-protocol","blog","cms","ai","publishing","claude","chatgpt","copilot","cursor"],"repository":{"type":"git","url":"git+https://github.com/architechcro/meet.archy-ai.com.git","directory":"tools/blog-post-mcp"},"description":"MCP server for AI-powered blog & page publishing on Archy. Works with Claude, ChatGPT, VS Code Copilot, Cursor, and any MCP-compatible client.","maintainers":[{"name":"architech_hr","email":"nenad.crncec@architech.hr"}],"readme":"# @archy-ai/blog-post-mcp\n\nMCP server for AI-powered blog and page publishing on [Archy](https://meet.archy-ai.com). Works with **Claude**, **ChatGPT**, **VS Code Copilot**, **Cursor**, **Windsurf**, and any MCP-compatible client.\n\n[![npm](https://img.shields.io/npm/v/@archy-ai/blog-post-mcp)](https://www.npmjs.com/package/@archy-ai/blog-post-mcp)\n[![MCP](https://img.shields.io/badge/MCP-2025--03--26-blue)](https://modelcontextprotocol.io)\n\n## What it does\n\n| Category | Tools |\n|----------|-------|\n| **Blog Posts** | Create drafts, update, publish, unpublish, list, AI-draft, AI-rewrite |\n| **Media** | Generate featured images/video via AI, upload local assets, attach to posts |\n| **Pages** | Create, update, publish pages with TiptapJSON body |\n| **AI Generation** | Page outlines, section content, full multi-page site generation |\n| **Workspace** | Git workspace summary for devlog context |\n\n## Quick Start\n\n### 1. Install\n\nNo install needed — runs via `npx`:\n\n```bash\nnpx -y @archy-ai/blog-post-mcp --help\n```\n\n### 2. Get your Publisher Key\n\n1. Go to [meet.archy-ai.com](https://meet.archy-ai.com) → Admin → Publishers\n2. Create a publisher key (starts with `pk_`)\n3. Copy the key\n\n### 3. Configure your client\n\nChoose your platform:\n\n---\n\n## Platform Configuration\n\n### Claude Desktop / Claude Code\n\nAdd to `~/Library/Application Support/Claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"archy-blog\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@archy-ai/blog-post-mcp\"],\n      \"env\": {\n        \"ARCHY_BLOG_BASE_URL\": \"https://meet.archy-ai.com\",\n        \"ARCHY_PUBLISHER_KEY\": \"pk_YOUR_KEY_HERE\",\n        \"ARCHY_API_KEY_HEADER\": \"x-archy-publisher-key\"\n      }\n    }\n  }\n}\n```\n\n📖 [Full Claude setup guide](./docs/claude-setup.md)\n\n### ChatGPT / OpenAI\n\nChatGPT requires the **HTTP transport** (hosted remotely):\n\n```bash\n# Host the HTTP server\nARCHY_BLOG_BASE_URL=https://meet.archy-ai.com \\\nARCHY_PUBLISHER_KEY=pk_YOUR_KEY \\\nnode http-server.mjs\n```\n\nThen in ChatGPT → Settings → MCP Servers, add:\n- **URL**: `https://your-host.example.com/mcp`\n- **Auth**: Bearer token → your publisher key\n\n📖 [Full ChatGPT/OpenAI setup guide](./docs/chatgpt-openai-setup.md)\n\n### VS Code Copilot\n\nAdd to `.vscode/mcp.json`:\n\n```json\n{\n  \"servers\": {\n    \"archy-blog\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@archy-ai/blog-post-mcp\"],\n      \"env\": {\n        \"ARCHY_BLOG_BASE_URL\": \"https://meet.archy-ai.com\",\n        \"ARCHY_PUBLISHER_KEY\": \"${input:archyPublisherKey}\",\n        \"ARCHY_API_KEY_HEADER\": \"x-archy-publisher-key\"\n      },\n      \"type\": \"stdio\"\n    }\n  },\n  \"inputs\": [{\n    \"id\": \"archyPublisherKey\",\n    \"type\": \"promptString\",\n    \"description\": \"Archy publisher key (pk_...)\",\n    \"password\": true\n  }]\n}\n```\n\n### Cursor\n\nAdd to `.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"archy-blog\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@archy-ai/blog-post-mcp\"],\n      \"env\": {\n        \"ARCHY_BLOG_BASE_URL\": \"https://meet.archy-ai.com\",\n        \"ARCHY_PUBLISHER_KEY\": \"pk_YOUR_KEY_HERE\",\n        \"ARCHY_API_KEY_HEADER\": \"x-archy-publisher-key\"\n      }\n    }\n  }\n}\n```\n\n### Windsurf\n\nAdd to `.windsurf/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"archy-blog\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@archy-ai/blog-post-mcp\"],\n      \"env\": {\n        \"ARCHY_BLOG_BASE_URL\": \"https://meet.archy-ai.com\",\n        \"ARCHY_PUBLISHER_KEY\": \"pk_YOUR_KEY_HERE\",\n        \"ARCHY_API_KEY_HEADER\": \"x-archy-publisher-key\"\n      }\n    }\n  }\n}\n```\n\n📖 [Full VS Code/Cursor/Windsurf guide](./docs/vscode-cursor-setup.md)\n\n---\n\n## Transport Modes\n\n| Mode | Use Case | Command |\n|------|----------|---------|\n| **stdio** | Local clients (Claude Desktop, VS Code, Cursor) | `npx -y @archy-ai/blog-post-mcp` |\n| **HTTP** | Remote clients (ChatGPT, hosted agents, web) | `node http-server.mjs` |\n\n### HTTP Server\n\nThe HTTP server exposes:\n- `POST /mcp` — Streamable HTTP (MCP 2025-03-26 spec)\n- `GET /sse` + `POST /messages` — Legacy SSE transport\n- `GET /health` — Health check\n\n```bash\nPORT=3100 \\\nARCHY_BLOG_BASE_URL=https://meet.archy-ai.com \\\nARCHY_PUBLISHER_KEY=pk_YOUR_KEY \\\nnode http-server.mjs\n```\n\n### Docker\n\n```bash\ndocker build -t archy-blog-mcp .\ndocker run -p 3100:3100 \\\n  -e ARCHY_BLOG_BASE_URL=https://meet.archy-ai.com \\\n  -e ARCHY_PUBLISHER_KEY=pk_YOUR_KEY \\\n  archy-blog-mcp\n```\n\n---\n\n## Environment Variables\n\n| Variable | Required | Default | Description |\n|----------|----------|---------|-------------|\n| `ARCHY_BLOG_BASE_URL` | Yes | `http://localhost:7072` | API base URL |\n| `ARCHY_PUBLISHER_KEY` | Yes* | — | Publisher key (`pk_...`) |\n| `ARCHY_API_KEY_HEADER` | No | `authorization` | Header mode: `x-archy-publisher-key`, `authorization`, `x-archy-api-key` |\n| `ARCHY_API_TIMEOUT_MS` | No | `60000` | Request timeout (ms) |\n| `ARCHY_MCP_DEBUG` | No | — | Set to `1` for debug logs (stderr) |\n| `ARCHY_WORKSPACE_SLUG` | No | — | Workspace slug for multi-tenant |\n| `PORT` | No | `3100` | HTTP server port |\n| `CORS_ORIGIN` | No | `*` | CORS allowed origin |\n\n\\* For local dev with `LOCAL_DEV_ADMIN_BYPASS=true` on the API, the key is optional.\n\n## CLI Flags\n\n```bash\nnpx -y @archy-ai/blog-post-mcp \\\n  --base https://meet.archy-ai.com \\\n  --header x-archy-publisher-key \\\n  --publisher-key pk_... \\\n  --timeout-ms 120000 \\\n  --debug\n```\n\n| Flag | Sets env var |\n|------|-------------|\n| `--base <url>` | `ARCHY_BLOG_BASE_URL` |\n| `--header <mode>` | `ARCHY_API_KEY_HEADER` |\n| `--publisher-key <pk_>` | `ARCHY_PUBLISHER_KEY` |\n| `--integrations-key <key>` | `ARCHY_INTEGRATIONS_API_KEY` |\n| `--timeout-ms <n>` | `ARCHY_API_TIMEOUT_MS` |\n| `--debug` | `ARCHY_MCP_DEBUG=1` |\n\n---\n\n## Available Tools\n\n### Blog Post Management\n\n| Tool | Description |\n|------|-------------|\n| `archy_blog_whoami` | Verify authentication and roles |\n| `archy_blog_create_draft` | Create a new draft post |\n| `archy_blog_update_post` | Update post metadata or body |\n| `archy_blog_list_posts` | List posts with filters |\n| `archy_blog_get_post` | Get a post by ID |\n| `archy_blog_publish` | Publish a draft post |\n| `archy_blog_unpublish` | Revert to draft |\n| `archy_blog_templates` | List available templates |\n\n### AI Content Generation\n\n| Tool | Description |\n|------|-------------|\n| `archy_blog_ai_draft` | AI-generate post body + SEO |\n| `archy_blog_ai_rewrite` | AI-rewrite existing content |\n| `archy_blog_ai_image` | Generate featured image with AI |\n| `archy_blog_ai_image_edit` | Edit/regenerate an image |\n| `archy_blog_ai_video` | Generate featured video with AI |\n| `archy_blog_ai_video_status` | Check video generation status |\n| `archy_blog_ai_video_prompt_suggest` | Get video prompt suggestions |\n\n### Media & Assets\n\n| Tool | Description |\n|------|-------------|\n| `archy_blog_upload_local_asset` | Upload a local file as asset |\n| `archy_blog_attach_feature_image` | Set featured image |\n| `archy_blog_attach_feature_video` | Set featured video |\n| `archy_blog_ai_media_jobs` | List AI media jobs |\n\n### Page Management\n\n| Tool | Description |\n|------|-------------|\n| `archy_pages_list` | List pages |\n| `archy_pages_create` | Create a new page |\n| `archy_pages_get` | Get page by ID |\n| `archy_pages_update` | Update page body/metadata |\n| `archy_pages_publish` | Publish a page |\n| `archy_pages_unpublish` | Unpublish a page |\n| `archy_pages_ai_outline` | AI-generate page outline |\n| `archy_pages_ai_section` | AI-generate section content |\n\n### Blog Content Composition\n\n| Tool | Description |\n|------|-------------|\n| `archy_blog_compose_doc` | Compose TiptapJSON from blocks |\n| `archy_blog_set_body_from_blocks` | Set post body from block array |\n| `archy_blog_append_blocks` | Append blocks to existing body |\n\n### Workspace\n\n| Tool | Description |\n|------|-------------|\n| `archy_workspace_summary` | Git workspace summary |\n\n---\n\n## Marketplace Registration\n\n### Smithery\n\nThis package includes a `smithery.yaml` for one-click install via [Smithery](https://smithery.ai):\n\n```bash\nnpx -y @smithery/cli install @archy-ai/blog-post-mcp\n```\n\n### MCP.run\n\nRegister at [mcp.run](https://mcp.run) by pointing to the npm package.\n\n### Glama\n\nSubmit to [glama.ai/mcp](https://glama.ai/mcp/servers) — auto-discovers from npm.\n\n### GitHub MCP Gallery\n\nThe VS Code MCP Gallery auto-discovers servers. See [docs/vscode-cursor-setup.md](./docs/vscode-cursor-setup.md#vs-code-marketplace-registration) for submission steps.\n\n---\n\n## Development\n\n### Run from source (stdio)\n\n```bash\ncd tools/blog-post-mcp\nnpm install\nARCHY_BLOG_BASE_URL=http://localhost:7072 \\\nARCHY_PUBLISHER_KEY=pk_LOCAL_KEY \\\nnode index.mjs\n```\n\n### Run from source (HTTP)\n\n```bash\ncd tools/blog-post-mcp\nnpm install\nARCHY_BLOG_BASE_URL=http://localhost:7072 \\\nARCHY_PUBLISHER_KEY=pk_LOCAL_KEY \\\nnpm run start:http:dev\n```\n\n### Smoke test\n\n```bash\n# Requires local SWA dev server running\nnpm run mcp:publisher:smoke\n```\n\n---\n\n## Security\n\n- Publisher keys are scoped per-workspace and can be revoked\n- All communication uses HTTPS in production\n- The HTTP server supports CORS restriction via `CORS_ORIGIN`\n- Never commit publisher keys — use environment variables or secret managers\n- For production HTTP deployments, add rate limiting and TLS termination\n\n## License\n\nMIT\n\nFrom `meet.archy-ai.com`:\n\n```bash\nnpm run mcp:blog:smoke\n```\n\nOptional flags:\n\n```bash\nnode ./scripts/archy-blog-mcp-smoke.mjs \\\n\t--base http://localhost:4280 \\\n\t--title \"MCP Smoke Test (manual title)\" \\\n\t--video-polls 30 \\\n\t--video-poll-ms 5000\n```\n\n### Expected result\n\nOn success, it prints a single JSON object like:\n\n```json\n{\n\t\"ok\": true,\n\t\"baseUrl\": \"http://localhost:4280\",\n\t\"post\": {\n\t\t\"id\": \"...\",\n\t\t\"slug\": \"...\",\n\t\t\"status\": \"published\",\n\t\t\"publishedAt\": \"...\"\n\t},\n\t\"featureImage\": { \"assetId\": \"...\", \"url\": \"...\" },\n\t\"featureVideo\": { \"requestId\": \"...\", \"assetId\": \"...\", \"url\": \"...\" }\n}\n```\n\nIf it fails, it exits non-zero and prints an error with context.\n\n## Agentic composer\n\nThese tools help an agent compose a validated TipTap/ProseMirror `doc` body from a safe “blocks” spec, then write it to a post.\n\n### Tools\n\n- `archy_blog_get_post`: fetch a post by id\n- `archy_blog_compose_doc`: convert blocks → TipTap `doc` JSON (no network)\n- `archy_blog_set_body_from_blocks`: replace the post body with blocks\n- `archy_blog_append_blocks`: append blocks to an existing TipTap `doc`\n\n### Block format (overview)\n\nEach block is an object with a `type`.\n\nSupported `type` values:\n\n- `heading` (attrs: `level` 1-3; content from `text` or `inlines`)\n- `paragraph` (content from `text` or `inlines`)\n- `quote` (`paragraphs: string[]`)\n- `bulletList`, `orderedList` (`items: string[]`)\n- `image` (`src`, optional `alt`)\n- `video` (`src`)\n- `embed` (`url`, optional `provider`)\n- `slider` (`items: [{ src, alt?, assetId? }]`)\n- `card`\n- `cardSet` (`cards: [...]`)\n- `cta`\n\nInline rich text is supported in `heading` and `paragraph` via:\n\n`inlines: [{ text, bold?, italic?, href? }]` where `href` must be `http(s)://...` or a site-relative path like `/pricing`.\n","readmeFilename":"README.md"}