Files
teahub/mcp

Green Tea MCP

Teahub's MCP against the Gitea at GITEA_URL. Sign-in is Gitea's OAuth (Gitea signs people in with GitHub or nostr), and every tool acts with the caller's own Gitea token. No service token, no allowlist, nothing deletes.

Env: GITEA_URL, PUBLIC_URL, ALLOWED_HOSTS; secrets GITEA_OAUTH_CLIENT_ID, GITEA_OAUTH_CLIENT_SECRET (an OAuth2 application on the Gitea with redirect PUBLIC_URL/auth/callback, confidential), JWT_SIGNING_KEY. State: /data (FastMCP's OAuth store, a Fly volume).

Tools: tea_whoami, tea_issues, tea_issue_get/create/edit, tea_issue_comments/comment, tea_repo, tea_repo_create, tea_tree, tea_file_get/change, tea_actions, tea_workflow_dispatch. Repos are owner/repo.

Deploy: fly deploy from this folder (app green-tea-mcp, volume mcp_data). Allocate public IPs once (fly ips allocate-v4 --shared, fly ips allocate-v6) and add the cert for PUBLIC_URL's host.

Known: the first connect from claude.ai after a fresh deploy sometimes ends in "Authentication failed" with no /token call despite a successful upstream exchange; the second attempt goes through. Not understood yet.