A read-only Model Context Protocol server for WordPress Core Trac. It runs as a Cloudflare Worker and uses Trac's public HTML, CSV, RSS, and diff endpoints.
Live servers:
Production:
- Standard MCP:
https://wordpress-trac-mcp-server-prod.a8c-aiops.workers.dev/mcp - Search/fetch compatibility:
https://wordpress-trac-mcp-server-prod.a8c-aiops.workers.dev/mcp/chatgpt - Health check:
https://wordpress-trac-mcp-server-prod.a8c-aiops.workers.dev/health
Staging:
- Standard MCP:
https://mcp-server-wporg-trac-staging.a8c-aiops.workers.dev/mcp - Search/fetch compatibility:
https://mcp-server-wporg-trac-staging.a8c-aiops.workers.dev/mcp/chatgpt - Health check:
https://mcp-server-wporg-trac-staging.a8c-aiops.workers.dev/health
The former staging deployment at https://mcp-server-wporg-trac-staging.a8cai.workers.dev is
deprecated and runs older code. Its a8cai.workers.dev subdomain differs from the active staging
deployment's a8c-aiops.workers.dev subdomain.
The standard /mcp endpoint provides:
| Tool | Purpose |
|---|---|
searchTickets |
Search by keywords, ticket number, or structured filters |
getTicket |
Read a ticket, its attachments, changesets, recent human discussion, and linked pull requests |
getChangeset |
Read a changeset and an optional truncated diff |
getTimeline |
Read recent Trac activity |
getTracInfo |
List components, milestones, priorities, severities, types, or statuses |
getChangeset expects the numeric revision argument, not rev:
{
"revision": 58504,
"includeDiff": false
}The /mcp/chatgpt compatibility endpoint provides search and fetch. Use a bare number for a
ticket and an r prefix for a changeset: 65739 and r58504.
searchTickets accepts plain keywords, ticket numbers, or filter expressions joined with &:
{
"query": "milestone=6.9&status=closed&resolution=fixed",
"limit": 50,
"page": 2
}It also accepts status, component, milestone, and resolution as separate arguments. A
separate argument overrides the same field in query. Results include pagination metadata.
Remote-capable MCP clients can connect directly to the standard endpoint. Clients that need a local
bridge can use mcp-remote:
{
"mcpServers": {
"wordpress-trac": {
"command": "npx",
"args": [
"mcp-remote",
"https://wordpress-trac-mcp-server-prod.a8c-aiops.workers.dev/mcp"
]
}
}
}For ChatGPT, add the compatibility endpoint as a custom app. See OpenAI's current MCP help because product labels and setup steps change.
After changing a configured server URL, reconnect the MCP server or restart the client once. Future deployments to the same URL do not require a client configuration change.
Requirements: Node.js 22 or later and pnpm 10.
pnpm install
pnpm devOpen http://localhost:8787/ to view the local landing page. See
docs/local-development.md for the full browser-preview workflow and
troubleshooting.
Run the complete local quality gate:
pnpm checkThis runs TypeScript, Biome, Vitest, and a Cloudflare Worker dry-run build. See docs/testing.md for manual protocol and live-data checks.
Deployment requires a configured Cloudflare account:
# Staging
pnpm run deploy
# Production
pnpm run deploy:production- The server is read-only and has no Trac credentials.
- Tool inputs receive runtime validation before any upstream request.
- Upstream requests use the fixed
core.trac.wordpress.orghost and the official linked-PR endpoint onapi.wordpress.org. - Transient transport failures, rate limits, server errors, and Trac bot challenges receive bounded retries. Permanent 403 and 404 responses return immediately.
- Responses are parsed from public Trac pages and machine-readable formats.
- The Worker keeps no ticket cache or durable state.
Keep tool schemas, runtime validation, tests, and documentation aligned. Run pnpm check before
opening a pull request.
GPL-2.0-or-later.