About contraption
Contraption Company MCP is a hosted server for searching and retrieving posts and pages from the Contraption Company blog. It is intended for clients that need access to published material, with content indexed through Chroma Cloud and refreshed from Ghost.
Key features
- 01Search posts and pages
- 02List posts with pagination
- 03Fetch content by canonical URL
- 04Sync updates from Ghost
- 05Index members-only content
Use cases
- 01Find blog posts by topic
- 02Retrieve a post for an AI workflow
- 03Browse posts in pages
- 04Access updated blog content
MCP support
Provides search, listing, and fetch tools for blog posts and pages to MCP clients through its hosted endpoint. The hosted server requires no authentication.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://mcp.contraption.co/claude mcp add --transport sse co-contraption https://mcp.contraption.co/{"mcpServers":{"co-contraption":{"type":"sse","url":"https://mcp.contraption.co/"}}}Open in Cursor{"servers":{"co-contraption":{"type":"sse","url":"https://mcp.contraption.co/"}}}Open in VS Code{"mcpServers":{"co-contraption":{"type":"sse","url":"https://mcp.contraption.co/"}}}{"mcpServers":{"co-contraption":{"serverUrl":"https://mcp.contraption.co/"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
Details
From the project READMEContraption 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 | https://mcp.contraption.co |
How to configure in common clients
Cursor
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"
}
}
}
ChatGPT
- Open Settings → Connectors.
- Click Create new connector.
- Set MCP Server URL to
https://mcp.contraption.co. - Leave authentication blank and save.
VS Code (Copilot Chat MCP)
Create or edit .vscode/mcp.json:
{
"servers": {
"contraption-company": {
"type": "http",
"url": "https://mcp.contraption.co"
}
}
}
Codex
Add to ~/.codex/config.toml:
[mcp_servers.contraption-company]
command = "npx"
args = ["mcp-remote", "--transport", "http", "https://mcp.contraption.co"]
Claude Code
Run in your terminal:
claude mcp add --transport http contraption-company https://mcp.contraption.co
OpenAI SDK (Python)
from 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-extras
- Configure environment:
cp .env.example .env
# Edit .env with your credentials
- Run the server:
./run.sh
# Or: uv run python -m src.main
Docker
# Build
docker build -t contraption-mcp .
# Run
docker run -p 8000:8000 --env-file .env contraption-mcp
# Or use docker-compose
docker-compose up
Configuration
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 defaultqueriescollection - Voyage 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 cadence - Members-only content and query logging are enabled by default. Ensure your privacy policy and access controls cover both.
Support and Privacy
- Support:
[email protected] - Privacy 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 check
License
MIT
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.