Cloudflare Worker MCP server for portfolio, GitHub context, and the frontend site.
get_profilereturns basic portfolio/contact links.get_recent_workreturns recent public GitHub work from the last 12 months.get_repo_detailreturns a selected repo in summary, standard, or deep mode.send_messagesends a short contact email to Aneesh(with the current config) through Resend with IP rate limiting.
- Edit
src/config.tsfor profile links, GitHub username, and tool descriptions. - Edit
src/tools.tsif you want to change tool schemas or output text. - Edit
src/contact-tools.tsif you want to change the email format or rate limiter. - Edit
src/github-client.tsif you want to change GitHub fetching or caching. - Edit
src/profile-client.tsif you want to change static profile data.
- The static site lives in
frontend/. - The Worker serves the frontend and the MCP endpoint from the same hostname.
- The UI loads tool metadata from
GET /toolson the same origin.
Create .dev.vars in the project root for local secrets:
GITHUB_TOKEN=your-token-here
RESEND_API_KEY=your-resend-api-keyYou can also set it in your shell for one session:
export GITHUB_TOKEN='your-token-here'Run locally with:
npm run devCall the worker:
curl -s -N -X POST http://127.0.0.1:8787/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_recent_work","arguments":{}}}'Set the production secret:
wrangler secret put GITHUB_TOKEN
wrangler secret put RESEND_API_KEYDeploy the Worker and frontend together:
npm run deployGitHub Actions deploys the Worker on pushes to main.
Required repository secrets:
CLOUDFLARE_API_TOKENCLOUDFLARE_ACCOUNT_ID
No non-secret Worker vars are required.