n2n-post2site
Local MCP bridge for AI-assisted website publishing.
n2n-post2site lets an AI IDE client talk to a protected website content API without exposing a database, filesystem, shell, deployment process, payments, or account administration. It is a thin stdio MCP server: validate tool input, map it to HTTP, and return the backend response.
Architecture
AI IDE client
-> MCP stdio
n2n-post2site
-> HTTPS + X-API-KEY
website content API
-> host adapter handles storage, policy, preview, publish
For Laravel sites, n2ns/laravel-post2site is the first-party backend package for this contract.
Workflow
The intended authoring loop is:
- Read
post2site://capabilities,post2site://site-context, andpost2site://editorial-policy. - Inspect existing content with
n2n_list_inventory,post2site://inventory/stats, andn2n_check_duplicates. - Draft locally in the chat/IDE. Use
n2n_validate_working_draftfor non-persistent backend validation. - After the draft is confirmed for remote saving, call
n2n_create_draft. - Upload only the selected image with
n2n_upload_asset, then update the draft if needed. - Validate and preview with
n2n_validate_draftandn2n_preview_draft. - Publish only after explicit publish confirmation with
n2n_publish_draft.
The MCP server does not define blog fields such as type, topics, geo_tags, seo_keywords, or locales. Those live inside the host-declared content_payload object and are validated by the backend.
Quick Start
Requirements:
- Node.js 22+
- An MCP-capable IDE/client
- A backend implementing the Post2Site publishing HTTP contract
- A content API key
Using npm:
{
"mcpServers": {
"n2n-post2site": {
"command": "npx",
"args": ["-y", "n2n-post2site"],
"env": {
"CONTENT_API_BASE_URL": "https://your-site.com/api/v1/mcp",
"CONTENT_API_KEY": "your-api-key"
}
}
}
}
Using a local checkout:
{
"mcpServers": {
"n2n-post2site": {
"command": "node",
"args": ["/path/to/n2n-post2site/dist/index.js"],
"env": {
"CONTENT_API_BASE_URL": "https://your-site.com/api/v1/mcp",
"CONTENT_API_KEY": "your-api-key"
}
}
}
}
CONTENT_API_BASE_URL should point at the protected publishing API base, for example https://your-site.example/api/v1/mcp. Keep the API key out of prompts, screenshots, and article content.
MCP Resources
Static resources:
post2site://capabilitiespost2site://site-contextpost2site://editorial-policypost2site://inventory/stats
Resource templates:
post2site://inventory/resources/{target_identifier}post2site://drafts/{draft_id}
List tools include canonical resource URIs and MCP resource_link blocks when returned rows can be opened as resources.
MCP Tools
Inventory:
n2n_list_inventoryn2n_check_duplicates
Drafting:
n2n_validate_working_draftn2n_list_draftsn2n_create_draftn2n_update_draftn2n_validate_draftn2n_preview_draft
Assets and publishing:
n2n_upload_assetn2n_publish_draft
See Resources Reference and Tools Reference for examples.
Security Boundaries
n2n-post2site should not expose:
- Delete operations.
- Direct database queries.
- Filesystem writes.
- Shell commands.
- Deployment or server operations.
- Product, pricing, payment, subscription, or account administration.
- Server-managed lifecycle fields such as
published_at,author, or host markers.
The backend is responsible for authentication, validation, preview rendering, publication, audit rules, and server-managed fields.
Development
npm run build
npm test
npm run smoke:mcp
npm run check
npm run check runs build, unit tests, built-surface checks, and the MCP protocol smoke test.
Related Docs
- Backend API Contract
- Architecture
- Resources Reference
- Tools Reference
- Client Smoke Testing
- Mock Backend Example
- Roadmap
- Changelog
- Security
License
MIT
No comments yet
Be the first to share your take.