{"_id":"@1door/connector","_rev":"2-e1aa882ce5d1d67591d8a0293521f326","name":"@1door/connector","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@1door/connector","version":"0.1.0","keywords":["mcp","claude","1door","blog","publishing"],"license":"MIT","_id":"@1door/connector@0.1.0","maintainers":[{"name":"sum1else","email":"michael@1door.cc"}],"homepage":"https://1door.cc","bugs":{"url":"https://github.com/MikhailBogatyrev/one-door/issues"},"bin":{"one-door-connector":"dist/index.js"},"dist":{"shasum":"c18ea70d05eaed6b9f4fc71d6019b60e0dfda8b0","tarball":"https://registry.npmjs.org/@1door/connector/-/connector-0.1.0.tgz","fileCount":13,"integrity":"sha512-3QsHFqwizDQMx5UXK+X/KPCQfxlWxZ5wh2llbOmhmbzHwTRQZN8zUoKvjRu2GiXMugG6NFE0YalLM/o16ZWypg==","signatures":[{"sig":"MEQCIDJDACaz1PzF6fQVCWlax1pZfgEtiYoTbqknhxyQR4EfAiA7MDamuOWMqHnOGX+EXepNJc9cVsHlUTutFawCfXa0kw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92771},"type":"module","engines":{"node":">=18"},"gitHead":"2696d2f07186a3ccf4fcfedb26cd3c5d6fb212d8","scripts":{"build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"sum1else","email":"michael@1door.cc"},"repository":{"url":"git+https://github.com/MikhailBogatyrev/one-door.git","type":"git","directory":"packages/connector"},"_npmVersion":"10.9.8","description":"Publish articles to 1door.cc directly from Claude — an MCP connector backed by the site's moderated publishing pipeline.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"zod":"^3.23.8","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/connector_0.1.0_1784276638759_0.7728014102343419","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@1door/connector","version":"0.1.1","description":"Publish articles to 1door.cc directly from Claude — an MCP connector backed by the site's moderated publishing pipeline.","license":"MIT","type":"module","bin":{"one-door-connector":"dist/index.js"},"repository":{"type":"git","url":"git+https://github.com/MikhailBogatyrev/one-door.git","directory":"packages/connector"},"homepage":"https://1door.cc","keywords":["mcp","claude","1door","blog","publishing"],"engines":{"node":">=18"},"publishConfig":{"access":"public"},"scripts":{"build":"tsc","prepublishOnly":"npm run build","start":"node dist/index.js"},"dependencies":{"@modelcontextprotocol/sdk":"^1.12.0","zod":"^3.23.8"},"devDependencies":{"typescript":"^5.6.0","@types/node":"^20.0.0"},"_id":"@1door/connector@0.1.1","gitHead":"ccb5772f5137a262faae84be38f96df737a5fd56","bugs":{"url":"https://github.com/MikhailBogatyrev/one-door/issues"},"_nodeVersion":"22.23.0","_npmVersion":"10.9.8","dist":{"integrity":"sha512-hbsJmKVZ/xw59Se5dBWZru9Oi/CkgZtzyPbqtzZo8Sd6z913QNZ8xBqgqLR8i4JSHYvLdgyJArfVdCOmwbxzOQ==","shasum":"a863f066d719749e6797e8b2cb747ed66b7d5e5c","tarball":"https://registry.npmjs.org/@1door/connector/-/connector-0.1.1.tgz","fileCount":13,"unpackedSize":93099,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIH1TI+SbVs7QDmvya4ISc0fhriw4CbU5V+DhIm/C47D0AiB8388aNOO/NgqIA2emEpETQKsOA60sMmYGS19LT6OpHA=="}]},"_npmUser":{"name":"sum1else","email":"michael@1door.cc"},"directories":{},"maintainers":[{"name":"sum1else","email":"michael@1door.cc"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/connector_0.1.1_1784376675047_0.6049164156490638"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-17T08:23:58.652Z","modified":"2026-07-18T12:11:15.371Z","0.1.0":"2026-07-17T08:23:58.910Z","0.1.1":"2026-07-18T12:11:15.194Z"},"bugs":{"url":"https://github.com/MikhailBogatyrev/one-door/issues"},"license":"MIT","homepage":"https://1door.cc","keywords":["mcp","claude","1door","blog","publishing"],"repository":{"type":"git","url":"git+https://github.com/MikhailBogatyrev/one-door.git","directory":"packages/connector"},"description":"Publish articles to 1door.cc directly from Claude — an MCP connector backed by the site's moderated publishing pipeline.","maintainers":[{"name":"sum1else","email":"michael@1door.cc"}],"readme":"# @1door/connector\n\nPublish blog posts to **[1door.cc](https://1door.cc)** straight from Claude — no GitHub deploy.\n\nThis is an [MCP](https://modelcontextprotocol.io) server. You add it to Claude Code or\nClaude Desktop with the key you were given, authorize it against your 1door.cc account, and\nClaude gets tools to draft, publish, and list your articles. Under the hood it calls the\nsite's own moderated publishing API (it never touches the database directly), so a post you\npublish here is identical to one written in the website composer — you are always the\nauthor, and the 1door editorial team still moderates.\n\n## How access works — key **+** authorization\n\nEverything published on 1door.cc goes out under a **real person's name**, so setup takes\ntwo steps:\n\n1. **You get a key** (`1door_…`) from the 1door team.\n2. **You authorize it against your 1door.cc account.** The key is only a *pairing code* —\n   on its own it cannot publish. You open an authorize link, sign in to your 1door.cc\n   account (or create one), and click **Approve**. From then on the same key publishes as\n   **you**: your byline, your \"My posts\".\n\nKeep the key secret — once linked, anyone holding it can publish as you. The 1door team\ncan revoke it at any time.\n\n## 1. Add the connector\n\n**Claude Code** (one command):\n\n```bash\nclaude mcp add one-door --env ONE_DOOR_TOKEN=1door_xxxxxxxx -- npx -y @1door/connector\n```\n\n**Claude Desktop** — add to `claude_desktop_config.json`\n(`~/Library/Application Support/Claude/` on macOS):\n\n```json\n{\n  \"mcpServers\": {\n    \"one-door\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@1door/connector\"],\n      \"env\": { \"ONE_DOOR_TOKEN\": \"1door_xxxxxxxx\" }\n    }\n  }\n}\n```\n\nRestart Claude Desktop after editing the config.\n\n## 2. Authorize your key (once)\n\nAsk Claude: **\"connect my 1door account\"**. It returns a link like\n`https://1door.cc/connect?code=1door_xxxxxxxx`. Open it — the key is your pass:\n\n- **New to 1door?** Enter your name + email, type the 6-digit code emailed to you, and\n  click **Create account & connect**. No invite needed — the key creates your account and\n  links itself in one step.\n- **Already a member?** Choose *Sign in*, use the email on your 1door account, then\n  **Approve**.\n\nCheck it worked — ask **\"who am I on 1door?\"**; it should answer with your real name.\nUntil you finish, every tool politely refuses and repeats the link.\n\n## Writing quality articles\n\nThe connector ships with the **1door Content Engine** — an editorial + humanization\nplaybook so what you publish reads like a senior practitioner wrote it. When you ask\nClaude to write a 1door post, it should follow **[`AUTHORING.md`](./AUTHORING.md)**:\n\n- an **interactive, step-by-step** flow (post type → source → brief → story options →\n  draft → package), never a one-shot dump;\n- a **live preview** of the post rendered in the 1door.cc dark house style in the\n  artifact side panel, updated as you build it — you see the final look before publishing;\n- the full palette of editable attributes (headings, quote, link, **attach a skill**,\n  **related services**, image, **YouTube embed**, HTML/widget, hero banner);\n- an anti-AI humanization pass (vocabulary blacklist, structural tells) so it doesn't\n  sound generated.\n\nDeep detail is in [`references/`](./references). `AUTHORING.md` says which file to read\nat each step.\n\n## 3. Use it\n\nJust ask Claude, e.g.:\n\n- *\"Publish a draft to 1door titled 'Onboarding teardown' with this article: …\"*\n- *\"List my 1door articles.\"*\n- *\"Take that draft live.\"*\n\n### Tools\n\n| Tool | What it does |\n| --- | --- |\n| `connect` | Get the link to authorize your key against your 1door.cc account (or confirm it's already linked). Run this at setup. |\n| `whoami` | Verify your key and see which real account it publishes as. |\n| `publish_article` | Create a post from a `title` + either `markdown` **or** structured `blocks` (text/h2/h3/quote/link/skill/image/embed/html), plus optional `services`, `hero`, `section`, `summary`. `publish:false` (default) saves a **Draft**; `publish:true` takes it **live**. |\n| `list_articles` | List your posts with status (Draft / Published / Archived) and public URLs. |\n\nNotes:\n\n- The article is either **Markdown** (headings, lists, links, images by URL) or a\n  structured **`blocks`** array — see [`AUTHORING.md`](./AUTHORING.md) for the full\n  palette and how each editable attribute maps to the payload.\n- **Video files** need Cloudflare R2 (not enabled yet) — use a YouTube/Vimeo `embed`\n  block instead.\n- A live post by a non-core member is published immediately **and** sent to the 1door editorial\n  team for moderation (approve / request changes / take down), same as the website.\n- The site refreshes from the database roughly every **5 minutes** (ISR), so a new or just-published\n  post can take a few minutes to appear on the public site and in `list_articles`.\n\n## Configuration\n\n| Env var | Required | Default | Notes |\n| --- | --- | --- | --- |\n| `ONE_DOOR_TOKEN` | yes | — | Your personal connector token from the account page. |\n| `ONE_DOOR_URL` | no | `https://1door.cc` | Override to point at a dev/staging site. |\n\n## Develop locally\n\n```bash\nnpm install\nnpm run build\nONE_DOOR_TOKEN=... ONE_DOOR_URL=http://localhost:3000 node dist/index.js\n```\n\nThe server speaks JSON-RPC over stdio; run it through the\n[MCP Inspector](https://github.com/modelcontextprotocol/inspector) to poke at the tools.\n","readmeFilename":"README.md"}