{"id":45187786,"url":"https://github.com/romain-gilliotte/spectral","last_synced_at":"2026-03-12T18:52:15.816Z","repository":{"id":339277738,"uuid":"1156677844","full_name":"romain-gilliotte/spectral","owner":"romain-gilliotte","description":"Capture web traffic while browsing, then let an LLM analyze it into OpenAPI specs, GraphQL schemas, and ready-to-use CLI configs with auth","archived":false,"fork":false,"pushed_at":"2026-03-05T17:16:43.000Z","size":3004,"stargazers_count":6,"open_issues_count":0,"forks_count":2,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-05T20:07:25.030Z","etag":null,"topics":["api","api-discovery","chrome-extension","cli","graphql","llm","mitmproxy","openapi","restish","reverse-engineering"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/romain-gilliotte.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-12T23:27:08.000Z","updated_at":"2026-03-05T17:16:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/romain-gilliotte/spectral","commit_stats":null,"previous_names":["romain-gilliotte/spectral"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/romain-gilliotte/spectral","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romain-gilliotte%2Fspectral","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romain-gilliotte%2Fspectral/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romain-gilliotte%2Fspectral/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romain-gilliotte%2Fspectral/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/romain-gilliotte","download_url":"https://codeload.github.com/romain-gilliotte/spectral/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/romain-gilliotte%2Fspectral/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30438670,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T14:34:45.044Z","status":"ssl_error","status_checked_at":"2026-03-12T14:09:33.793Z","response_time":114,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","api-discovery","chrome-extension","cli","graphql","llm","mitmproxy","openapi","restish","reverse-engineering"],"created_at":"2026-02-20T11:04:46.078Z","updated_at":"2026-03-12T18:52:15.810Z","avatar_url":"https://github.com/romain-gilliotte.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/romain-gilliotte/spectral/main/assets/banner-wide-dark.png\"\u003e\n    \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/romain-gilliotte/spectral/main/assets/banner-wide-light.png\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/romain-gilliotte/spectral/main/assets/banner-wide-dark.png\" alt=\"Spectral\" width=\"600\"\u003e\n  \u003c/picture\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#install\"\u003eInstall\u003c/a\u003e ·\n  \u003ca href=\"#why-spectral\"\u003eWhy Spectral\u003c/a\u003e ·\n  \u003ca href=\"#how-it-works\"\u003eHow it works\u003c/a\u003e ·\n  \u003ca href=\"https://romain-gilliotte.github.io/spectral/\"\u003e\u003cstrong\u003eDocumentation\u003c/strong\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nBrowse any website or mobile app normally. Spectral observes what you do, figures out the meaning behind each API call, and builds MCP tools that let AI agents use the same app.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/romain-gilliotte/spectral/main/assets/demo.gif\" width=\"750\" alt=\"Spectral demo — analyze traffic, then Claude uses the API\"\u003e\n\u003c/p\u003e\n\n## Why Spectral\n\nMost apps — web, mobile, desktop — sit on top of undocumented HTTP APIs. Spectral records the traffic while you browse, uses an LLM to understand what each call does, and generates MCP tools that any AI agent can call.\n\n- **Works everywhere.** Websites, mobile apps (Android), desktop apps, CLI tools — if it speaks HTTPS, Spectral can capture it.\n\n- **Understands what you do, not just what the network sends.** Spectral correlates your clicks and navigation with API calls to figure out the business meaning of each endpoint — not just its shape.\n\n- **Tools that fix themselves.** When a generated tool fails at runtime, the MCP server feeds the error back to an LLM and patches the tool automatically.\n\n- **LLM at build time, not at runtime.** The LLM is only used during analysis and self-repair. Once your tools work, every call is a direct HTTP request — fast, cheap, and deterministic.\n\n- **Faster than browser automation.** No headless browser, no fragile selectors, no waiting for pages to render. Spectral tools call the API directly, which is orders of magnitude faster and more reliable than controlling a browser with an agent.\n\n- **Also generates API specs.** Beyond MCP tools, Spectral can produce OpenAPI 3.1 specs from REST traffic and GraphQL SDL schemas from GraphQL traces — useful for documentation, code generation, or feeding other tools.\n\n## Install\n\nThe install script sets up Spectral, installs shell completions, and ensures your PATH is configured:\n\n```bash\ncurl -LsSf https://raw.githubusercontent.com/romain-gilliotte/spectral/main/install.sh | bash\n```\n\nIf you prefer managing packages yourself, you can install directly with pip or [uv](https://docs.astral.sh/uv/) — but you will need to set up shell completions manually:\n\n```bash\npip install spectral-mcp\n# or\nuv tool install spectral-mcp\n```\n\nYou also need an [Anthropic API key](https://console.anthropic.com/) — Spectral will prompt for it on first analysis.\n\nSee the [documentation](https://romain-gilliotte.github.io/spectral/) for setup guides, capture instructions, and CLI reference.\n\n## How it works\n\n1. **Capture** — Chrome extension (web) or MITM proxy records traffic while you use the app\n2. **Analyze** — An LLM correlates your actions with API calls, infers endpoint patterns, and business meaning\n3. **Authenticate** — The CLI detects the auth flow and generates a login script. Run it once; the MCP server refreshes automatically\n4. **Use** — Start the MCP server. AI agents call the API directly\n\n## License\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromain-gilliotte%2Fspectral","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fromain-gilliotte%2Fspectral","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fromain-gilliotte%2Fspectral/lists"}