{"manifest":{"id":"github","name":"GitHub","description":"Stateful GitHub emulator for REST, GraphQL, OAuth, GitHub Apps, webhooks, and MCP flows.","docsUrl":"https://docs.emulators.dev/github","surfaces":[{"id":"rest","kind":"rest","title":"REST API","status":"partial","basePath":"/"},{"id":"graphql","kind":"graphql","title":"GraphQL API","status":"partial","basePath":"/graphql"},{"id":"oauth","kind":"oauth","title":"OAuth app flow","status":"supported","basePath":"/login/oauth"},{"id":"apps","kind":"provider-specific","title":"GitHub App auth","status":"partial"},{"id":"mcp","kind":"mcp","title":"GitHub MCP surface","status":"partial","basePath":"/mcp"},{"id":"webhooks","kind":"webhooks","title":"Webhooks","status":"partial"}],"auth":[{"id":"bearer","title":"Bearer token","type":"bearer-token","status":"partial"},{"id":"oauth-code","title":"OAuth authorization code","type":"oauth-authorization-code","status":"supported"},{"id":"github-app-jwt","title":"GitHub App JWT","type":"jwt-app","status":"partial"},{"id":"mcp-dcr","title":"MCP dynamic client registration","type":"dynamic-client-registration","status":"partial"},{"id":"webhook-secret","title":"Webhook secret","type":"webhook-secret","status":"partial"}],"specs":[{"kind":"openapi","title":"GitHub REST API subset","coverage":"hand-authored","operations":[{"operationId":"users/getAuthenticated","method":"GET","path":"/user","status":"hand-authored"},{"operationId":"users/getByUsername","method":"GET","path":"/users/:username","status":"hand-authored"},{"operationId":"repos/get","method":"GET","path":"/repos/:owner/:repo","status":"hand-authored"},{"operationId":"repos/createForAuthenticatedUser","method":"POST","path":"/user/repos","status":"hand-authored"},{"operationId":"issues/listForRepo","method":"GET","path":"/repos/:owner/:repo/issues","status":"hand-authored"},{"operationId":"issues/create","method":"POST","path":"/repos/:owner/:repo/issues","status":"hand-authored"},{"operationId":"pulls/list","method":"GET","path":"/repos/:owner/:repo/pulls","status":"hand-authored"},{"operationId":"pulls/create","method":"POST","path":"/repos/:owner/:repo/pulls","status":"hand-authored"},{"operationId":"actions/listWorkflowRuns","method":"GET","path":"/repos/:owner/:repo/actions/runs","status":"partial"}]},{"kind":"graphql","title":"GitHub GraphQL subset","coverage":"hand-authored"},{"kind":"mcp","title":"GitHub MCP tool subset","coverage":"hand-authored"},{"kind":"manual","title":"GitHub App and webhook behavior","coverage":"partial"}],"scenarios":[{"id":"empty","title":"Empty account","description":"A single authenticated user with no repositories."},{"id":"repo-with-pr","title":"Repository with pull request","description":"An org repo seeded with an open PR."}],"seedSchema":{"description":"Seed users, organizations, repositories, and OAuth apps.","fields":[{"key":"users","title":"Users","description":"Accounts addressable by login.","example":[{"login":"octocat","name":"The Octocat"}]},{"key":"orgs","title":"Organizations","example":[{"login":"my-org","name":"My Organization"}]},{"key":"repos","title":"Repositories","example":[{"owner":"octocat","name":"hello-world","auto_init":true}]},{"key":"oauth_apps","title":"OAuth apps","example":[{"client_id":"Iv1.example","client_secret":"example","name":"My App"}]}],"example":{"users":[{"login":"octocat","name":"The Octocat","email":"octocat@github.com"}],"orgs":[{"login":"my-org","name":"My Organization"}],"repos":[{"owner":"octocat","name":"hello-world","description":"My first repository","auto_init":true}]}},"stateModel":{"description":"Entities mutated by GitHub provider calls.","collections":[{"name":"users"},{"name":"repos"},{"name":"issues"},{"name":"pulls"},{"name":"orgs"},{"name":"teams"},{"name":"releases"},{"name":"apps"},{"name":"oauth_apps"}]},"connections":[{"id":"octokit","title":"Octokit (TypeScript)","kind":"sdk","language":"typescript","description":"Point Octokit at the emulator instance.","template":"import { Octokit } from \"@octokit/rest\";\n\nconst octokit = new Octokit({\n  baseUrl: \"{{baseUrl}}\",\n  auth: \"{{token}}\",\n});"},{"id":"gh-env","title":"GitHub API base URL (env)","kind":"env","language":"bash","description":"Many GitHub SDKs and the gh CLI honor GITHUB_API_URL.","template":"GITHUB_API_URL={{baseUrl}}\nGITHUB_TOKEN={{token}}"},{"id":"curl","title":"curl","kind":"curl","language":"bash","description":"Call the REST API directly.","template":"curl -s {{baseUrl}}/user -H \"authorization: Bearer {{token}}\""},{"id":"base-url","title":"Base URL (env)","kind":"env","language":"bash","description":"Point your SDK or app at the emulator instead of the real provider.","template":"{{SERVICE_UPPER}}_BASE_URL={{baseUrl}}"},{"id":"create-credential","title":"Create a credential","kind":"curl","language":"bash","description":"Mint a working credential for this instance.","template":"curl -s -X POST {{controlBaseUrl}}/credentials \\\n  -H \"content-type: application/json\" \\\n  -d '{\"type\":\"{{defaultAuthType}}\"}'"},{"id":"inspect-ledger","title":"Inspect requests","kind":"curl","language":"bash","description":"Read the request ledger to validate how your app called the service.","template":"curl -s {{controlBaseUrl}}/ledger"}],"resetBehavior":{"description":"Resets the instance to its seeded baseline.","reseeds":true,"clearsLedger":true,"clearsWebhooks":true},"ledger":{"description":"Recent provider requests with sensitive headers and fields redacted.","recordsFields":["timestamp","method","host","path","route","operationId","correlationId","identity","request","response","summary","sideEffects","webhookDeliveries","durationMs"],"redactsSensitive":true,"correlationId":true,"webhookDeliveries":true,"sideEffects":true,"persistent":true,"maxEntries":1000},"inspectorTabs":[{"id":"overview","title":"Overview","kind":"landing","description":"Service surfaces, base URLs, and connection snippets."},{"id":"ledger","title":"Ledger","kind":"ledger","description":"Recent provider requests recorded by the emulator."},{"id":"state","title":"State","kind":"state","description":"Current seeded and mutated instance state."},{"id":"credentials","title":"Credentials","kind":"credentials","description":"Mint tokens, API keys, or OAuth clients."},{"id":"seed","title":"Seed","kind":"seed","description":"Seed state or load a scenario."},{"id":"spec","title":"Spec","kind":"spec","description":"OpenAPI / GraphQL spec sources and coverage."},{"id":"logs","title":"Webhooks","kind":"logs","description":"Webhook deliveries dispatched by the emulator."}]},"instance":null,"sampleInstance":{"service":"github","instance":"your-instance","baseUrl":"https://github.your-instance.emulators.dev","providerBaseUrl":"https://github.your-instance.emulators.dev","controlBaseUrl":"https://github.your-instance.emulators.dev/_emulate"},"connections":[{"id":"octokit","title":"Octokit (TypeScript)","kind":"sdk","language":"typescript","description":"Point Octokit at the emulator instance.","template":"import { Octokit } from \"@octokit/rest\";\n\nconst octokit = new Octokit({\n  baseUrl: \"{{baseUrl}}\",\n  auth: \"{{token}}\",\n});","body":"import { Octokit } from \"@octokit/rest\";\n\nconst octokit = new Octokit({\n  baseUrl: \"https://github.your-instance.emulators.dev\",\n  auth: \"<token>\",\n});"},{"id":"gh-env","title":"GitHub API base URL (env)","kind":"env","language":"bash","description":"Many GitHub SDKs and the gh CLI honor GITHUB_API_URL.","template":"GITHUB_API_URL={{baseUrl}}\nGITHUB_TOKEN={{token}}","body":"GITHUB_API_URL=https://github.your-instance.emulators.dev\nGITHUB_TOKEN=<token>"},{"id":"curl","title":"curl","kind":"curl","language":"bash","description":"Call the REST API directly.","template":"curl -s {{baseUrl}}/user -H \"authorization: Bearer {{token}}\"","body":"curl -s https://github.your-instance.emulators.dev/user -H \"authorization: Bearer <token>\""},{"id":"base-url","title":"Base URL (env)","kind":"env","language":"bash","description":"Point your SDK or app at the emulator instead of the real provider.","template":"{{SERVICE_UPPER}}_BASE_URL={{baseUrl}}","body":"GITHUB_BASE_URL=https://github.your-instance.emulators.dev"},{"id":"create-credential","title":"Create a credential","kind":"curl","language":"bash","description":"Mint a working credential for this instance.","template":"curl -s -X POST {{controlBaseUrl}}/credentials \\\n  -H \"content-type: application/json\" \\\n  -d '{\"type\":\"{{defaultAuthType}}\"}'","body":"curl -s -X POST https://github.your-instance.emulators.dev/_emulate/credentials \\\n  -H \"content-type: application/json\" \\\n  -d '{\"type\":\"bearer-token\"}'"},{"id":"inspect-ledger","title":"Inspect requests","kind":"curl","language":"bash","description":"Read the request ledger to validate how your app called the service.","template":"curl -s {{controlBaseUrl}}/ledger","body":"curl -s https://github.your-instance.emulators.dev/_emulate/ledger"}]}