co.contraption/mcp
An MCP server that provides [describe what your server does]
★ 1MITother
Install
Config snippet generator goes here (5 client tabs)
README
# Contraption Company MCP
An MCP (Model Context Protocol) server for [Contraption Company](https://contraption.co) essay, built on [Chroma Cloud](https://trychroma.com).
## 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
<details>
<summary><b>Cursor</b></summary>
Use the deep link to install directly in Cursor: [Install Contraption Company MCP](cursor://anysphere.cursor-deeplink/mcp/install?name=contraption-company&config=eyJ1cmwiOiJodHRwczovL21jcC5jb250cmFwdGlvbi5jbyJ9).
Or, create or edit `~/.cursor/mcp.json`:
```json
{
"mcpServers": {
"contraption-company": {
"url": "https://mcp.contraption.co"
}
}
}
```
</details>
<details>
<summary><b>ChatGPT</b></summary>
1. Open **Settings → Connectors**.
2. Click **Create new connector**.
3. Set **MCP Server URL** to `https://mcp.contraption.co`.
4. Leave authentication blank and save.
</details>
<details>
<summary><b>VS Code (Copilot Chat MCP)</b></summary>
Create or edit `.vscode/mcp.json`:
```json
{
"servers": {
"contraption-company": {
"type": "http",
"url": "https://mcp.contraption.co"
}
}
}
```
</details>
<details>
<summary><b>Codex</b></summary>
Add to `~/.codex/config.toml`:
```toml
[mcp_servers.contraption-company]
command = "npx"
args = ["mcp-remote", "--transport", "http", "https://mcp.contraption.co"]
```
</details>
<details>
<summary><b>Claude Code</b></summary>
Run in your terminal:
```bash
claude mcp add --transport http contraption-company https://mcp.contraption.co
```
</details>
<details>
<summary><b>OpenAI SDK (Python)</b></summary>
```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)
```
</details>
## 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
1. Clone and install:
```bash
git clone <repository>
cd mcp
uv sync --all-extras
```
2. Configure environment:
```bash
cp .env.example .env
# Edit .env with your credentials
```
3. Run the server:
```bash
./run.sh
# Or: uv run python -m src.main
```
### Docker
```bash
# 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_COLLECTION` to override the default `queries` collection
- **Voyage API Key**: Required to generate contextualized embeddings
- **Ghost Blog URL**: Your Ghost blog's URL
- **Polling Interval (optional)**: Set `POLL_INTERVAL_SECONDS` to 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**: `hello@contraption.co`
- **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 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 identifiers
- `search(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 check
- `GET /debug/search`: Debug search endpoint (see `/debug/docs` for Swagger UI)
- `/mcp/*`: MCP protocol endpoints
### Background Sync
The server polls the Ghost Admin API every 5 minutes to detect new, updated, or delet