An MCP server that provides [describe what your server does]
One address for any MCP client. No sign-in needed on this server.
At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Odel could not list its tools without signing in.
An MCP (Model Context Protocol) server for Contraption Company essay, built on Chroma Cloud.
Contraption Company MCP is available as a hosted MCP server with no authentication.
| Field | Value |
|---|---|
| Server URL | https://mcp.contraption.co |
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"
}
}
}
https://mcp.contraption.co.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.co
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)
git clone <repository>
cd mcp
uv sync --all-extras
cp .env.example .env
# Edit .env with your credentials
./run.sh
# Or: uv run python -m src.main
# Build
docker build -t contraption-mcp .
# Run
docker run -p 8000:8000 --env-file .env contraption-mcp
# Or use docker-compose
docker-compose up
Running locally requires credentials for external services:
CHROMA_QUERY_COLLECTION to override the default queries collectionPOLL_INTERVAL_SECONDS to override the default 5 minute sync cadencehello@contraption.cofetch(id): Fetch a single post or page using the canonical URL as the identifier. Provide the id returned by list_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 IDsGET /: Server info (redirects to GitHub repo for non-MCP requests)GET /health: Health checkGET /debug/search: Debug search endpoint (see /debug/docs for Swagger UI)/mcp/*: MCP protocol endpointsThe 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.
# Install dev dependencies
make dev
# Run tests
make test
# Lint and format
make format lint
# Run all checks
make check
MIT