The Contraption Company MCP server provides programmatic access to a Ghost blog's content through semantic search and structured data retrieval.
Core Features:
Semantic Search: Perform hybrid search across blog posts and pages using natural language queries with Voyage contextualized embeddings and Splade sparse vectors
Fetch Individual Content: Retrieve full blog posts or pages using slugs, canonical URLs, or post:// identifiers
List Posts: Browse posts with pagination (up to 10 per page), sorted by newest or oldest publication date
Access Members-Only Content: Full access to all published posts and pages, including members-only content via Ghost Admin API credentials
Automatic Updates: Background syncing polls the Ghost Admin API every 5 minutes to detect and incorporate new, updated, or deleted content
Query Logging: Records search queries for analytical purposes
Performance & Deployment:
Built on FastAPI and Chroma Cloud for fast responses
Publicly accessible hosted server at
https://mcp.contraption.cowith no authentication requiredSupports local Docker deployment with configurable environment variables
Works with Cursor, ChatGPT, VS Code, Codex, Claude Code, and OpenAI SDK
Provides tools for accessing and searching Ghost blog content, including retrieving individual posts, listing posts with pagination, and performing semantic search across published content including members-only posts
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Contraption Company MCPsearch for posts about AI-powered tools for developers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Contraption Company MCP
An MCP (Model Context Protocol) server for Contraption Company essay, built on Chroma Cloud.
How to Install
Contraption Company MCP is available as a hosted MCP server with no authentication.
Field | Value |
Server URL |
|
How to configure in common clients
Use the deep link to install directly in Cursor: Install Contraption Company MCP.
Or, create or edit ~/.cursor/mcp.json:
{
"mcpServers": {
"contraption-company": {
"url": "https://mcp.contraption.co"
}
}
}Open Settings → Connectors.
Click Create new connector.
Set MCP Server URL to
https://mcp.contraption.co.Leave authentication blank and save.
Create or edit .vscode/mcp.json:
{
"servers": {
"contraption-company": {
"type": "http",
"url": "https://mcp.contraption.co"
}
}
}Add to ~/.codex/config.toml:
[mcp_servers.contraption-company]
command = "npx"
args = ["mcp-remote", "--transport", "http", "https://mcp.contraption.co"]Run in your terminal:
claude mcp add --transport http contraption-company https://mcp.contraption.cofrom openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
input="List the newest Contraption Company blog posts.",
tools=[
{
"type": "mcp",
"server_label": "contraption-company",
"server_url": "https://mcp.contraption.co",
"require_approval": "never",
}
],
)
print(response)Features
Search: Find posts and pages by query text
Automatic Indexing: Syncs with the blog API on startup and via scheduled polling
Full Content Access: Indexes all published posts and pages, including members-only content
Fast Performance: Powered by FastAPI and Chroma Cloud
Background Updates: Polls Ghost every few minutes for new, updated, or deleted posts and pages
Query Logging: Records searches in a dedicated Chroma collection for analysis
Docker Ready: Includes Dockerfile for easy deployment
Well Tested: Comprehensive test suite with pytest
Run Locally
Clone and install:
git clone <repository>
cd mcp
uv sync --all-extrasConfigure environment:
cp .env.example .env
# Edit .env with your credentialsRun the server:
./run.sh
# Or: uv run python -m src.mainDocker
# Build
docker build -t contraption-mcp .
# Run
docker run -p 8000:8000 --env-file .env contraption-mcp
# Or use docker-compose
docker-compose upConfiguration
Running locally requires credentials for external services:
Ghost Admin API Key: From your Ghost Admin panel (Settings > Integrations)
Chroma Cloud Credentials: Tenant ID, Database, and API key from Chroma Cloud
Chroma Query Collection (optional): Set
CHROMA_QUERY_COLLECTIONto override the defaultqueriescollectionVoyage API Key: Required to generate contextualized embeddings
Ghost Blog URL: Your Ghost blog's URL
Polling Interval (optional): Set
POLL_INTERVAL_SECONDSto override the default 5 minute sync cadenceMembers-only content and query logging are enabled by default. Ensure your privacy policy and access controls cover both.
Support and Privacy
Support:
hello@contraption.coPrivacy policy: https://www.contraption.co/privacy/
Query logging and members-only content are enabled, and the privacy policy must cover both.
MCP Tools
fetch(id): Fetch a single post or page using the canonical URL as the identifier. Provide theidreturned bylist_posts/search(which is the canonical URL); slugs and shorthand schemes are also accepted but responses always resolve to full URLs.list_posts(sort_by, page, limit): List posts with pagination, returning canonical URLs as identifierssearch(query, limit): Search posts and pages by query text; returns canonical URLs for result IDs
API Endpoints
GET /: Server info (redirects to GitHub repo for non-MCP requests)GET /health: Health checkGET /debug/search: Debug search endpoint (see/debug/docsfor Swagger UI)/mcp/*: MCP protocol endpoints
Background Sync
The server polls the Ghost Admin API every 5 minutes to detect new, updated, or deleted posts and pages. Adjust the cadence by setting the POLL_INTERVAL_SECONDS environment variable.
Development
# Install dev dependencies
make dev
# Run tests
make test
# Lint and format
make format lint
# Run all checks
make checkLicense
MIT
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.