GitHub publishes a canonical OpenAPI 3 spec covering every REST endpoint. wmcp.sh ingests it and serves you ~900 MCP tools, with your GitHub OAuth token auto-injected from the wmcp.sh sign-in. Same flow for Octokit alternatives, gh CLI scripts, and Composio replacements.
Last updated 2026-05-28 · works with Claude, OpenAI, LangChain, and any MCP client
| Capability | Octokit / gh CLI | Composio GitHub | wmcp.sh |
|---|---|---|---|
| Setup time | Install SDK + token wiring | Platform signup + auth flow | Sign in with GitHub — done |
| Coverage | SDK reflects current GitHub API version | Curated common ops | Every documented endpoint (~900) |
| New endpoints | Wait for SDK release | Wait for platform update | Available the moment GitHub publishes |
| Auth | PAT or app token, you store it | OAuth via Composio platform | GitHub OAuth from wmcp.sh sign-in |
| MCP shape | Wrap each method yourself | Auto-mapped | Native MCP / tool_use |
| Cost | Free SDK + your hosting | Platform tier | Free 100/day + $29/mo Pro |
All MCP-shaped — consumed directly by Claude tool_use, OpenAI function-calling, or LangChain.
| Tool | Type | Returns |
|---|---|---|
repos/getRepo | Live action | Repo metadata + stats |
issues/createIssue | Live action | Created issue with number + URL |
issues/listForRepo | Live action | Open issue list (paginated) |
pulls/list | Live action | PRs with state, base/head, mergeable status |
pulls/createPullRequest | Live action | New PR with number + URL |
gists/createGist | Live action | Gist URL |
actions/listWorkflowRuns | Live action | CI run history |
search/code | Live action | Code search results |
from wmcp import WmcpClient
from wmcp.anthropic import to_anthropic_tools, execute_tool_use
from anthropic import Anthropic
client = WmcpClient(api_key="webmcp_live_…")
spec = "https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json"
tools = client.tools(spec)
# 900+ tools is too many. Filter to Issues subset.
issue_tools = [t for t in tools if t.name.lower().startswith("issues")]
anthropic = Anthropic()
msg = anthropic.messages.create(
model="claude-opus-4-7",
max_tokens=1024,
tools=to_anthropic_tools(issue_tools),
messages=[{"role": "user",
"content": "File a bug in New1Direction/webmcp-anything: '/u/<hash> returns 500 on cold cache'."}],
)
for block in msg.content:
if block.type == "tool_use":
# Worker auto-injects your signed-in GitHub OAuth token. Agent passes no auth.
result = execute_tool_use(client, spec, block.model_dump())
print(result)
api.github.com call. PATs still work if you prefer — pass via _auth arg.read:user user:email repo gist read:org workflow — covers repo CRUD, gists, org info, and workflow runs. The scope set is a union of sign-in and connector scopes so one OAuth round serves both.tools.filter(t => t.name.startsWith("issues")) for Issues only, etc. Most agent frameworks struggle past ~50 tools in a single message; filtering is essential.GitHub's the canonical OpenAPI-as-MCP example. If you're building your own API, see how to ship a clean spec + agent-friendly auth.
Custom adapter + hosted MCP at mcp.yourbrand.com + verified badge. From $499 one-time setup.