{"id":32778563,"url":"https://github.com/portkey-ai/hoot","last_synced_at":"2025-11-21T00:06:17.455Z","repository":{"id":320528211,"uuid":"1082421137","full_name":"Portkey-AI/hoot","owner":"Portkey-AI","description":"Try any MCP server","archived":false,"fork":false,"pushed_at":"2025-11-01T19:06:42.000Z","size":29247,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-01T21:06:12.278Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/Portkey-AI.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/SECURITY.md","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":"2025-10-24T08:06:32.000Z","updated_at":"2025-10-27T07:53:16.000Z","dependencies_parsed_at":"2025-10-24T10:16:21.258Z","dependency_job_id":"c18bc0b9-bf47-457c-9b89-2bf076bd86a1","html_url":"https://github.com/Portkey-AI/hoot","commit_stats":null,"previous_names":["portkey-ai/hoot"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/Portkey-AI/hoot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Portkey-AI%2Fhoot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Portkey-AI%2Fhoot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Portkey-AI%2Fhoot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Portkey-AI%2Fhoot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Portkey-AI","download_url":"https://codeload.github.com/Portkey-AI/hoot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Portkey-AI%2Fhoot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":282658689,"owners_count":26705665,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-04T02:00:05.887Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2025-11-04T15:01:12.963Z","updated_at":"2025-11-21T00:06:17.448Z","avatar_url":"https://github.com/Portkey-AI.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🦉 Hoot\n\n[![npm version](https://img.shields.io/npm/v/@portkey-ai/hoot?color=5ccfe6\u0026label=version)](https://www.npmjs.com/package/@portkey-ai/hoot)\n[![npm downloads](https://img.shields.io/npm/dm/@portkey-ai/hoot?color=5ccfe6)](https://www.npmjs.com/package/@portkey-ai/hoot)\n[![License: MIT](https://img.shields.io/badge/License-MIT-5ccfe6.svg)](https://opensource.org/licenses/MIT)\n[![Node.js Version](https://img.shields.io/node/v/@portkey-ai/hoot?color=5ccfe6)](https://nodejs.org)\n\n**MCP Testing Tool** — Like Postman, but for the Model Context Protocol.\n\nTest, debug, and explore MCP servers with a beautiful interface. No AI chat needed.\n\nhttps://github.com/user-attachments/assets/e3add38e-9636-4f40-99d8-f4a2b8f0f056\n\n\u003e **⚠️ Beta Software** — Hoot is in active development. Found a bug? [Open an issue](https://github.com/Portkey-AI/hoot/issues). Want to contribute? [PRs welcome](./CONTRIBUTING.md)!\n\n## Quick Start\n\n**🌐 Try instantly (no install):**\n\n👉 **[hoot.run](https://hoot.run)** — Opens in your browser, ready to test.\n\n**Or run locally:**\n\n```bash\nnpx -y @portkey-ai/hoot\n```\n\nOpens on `localhost:8009`. One command, zero config.\n\n![npx-hoot](https://github.com/user-attachments/assets/3c8c80e2-6ad3-439e-80eb-e2f6c4d22d8e)\n\n\n## Features\n\n### Core Testing\n- **Connect to any MCP server** — HTTP and SSE transport support\n- **Auto-detection** — Just paste a URL, Hoot figures out the rest\n- **Execute tools** — Test tools with parameters and view responses\n- **Copy-paste friendly** — Everything is clipboard-ready\n\n### Authentication \u0026 Security\n- **OAuth 2.1** with automatic discovery and compliance testing ([docs](./docs/OAUTH-COMPLIANCE-COMPLETE.md))\n- **JWT-based sessions** — Secure local authentication\n- **Rate limiting \u0026 audit logs** — Built-in security features\n- **Localhost-only by default** — Safe for local development\n\n### Smart Features\n- **Intelligent tool filtering** — Context-aware tool selection powered by AI\n- **Chat interface** — Test tools conversationally with LLM assistance\n- **Keyboard shortcuts** — Lightning-fast navigation ([docs](./docs/KEYBOARD_SHORTCUTS.md))\n- **8 beautiful themes** — Light \u0026 dark modes for every preference ([docs](./docs/THEMES.md))\n\n### Sharing \u0026 Collaboration\n- **🦉 \"Try in Hoot\" links** — Share servers with a single URL ([docs](./docs/TRY_IN_HOOT.md))\n- **Persistent state** — Your servers and tools stay configured between sessions\n\n## How It Works\n\nHoot runs a Node.js backend that acts as the MCP client, eliminating CORS issues when connecting to MCP servers from your browser.\n\n```\nBrowser (React) → Backend (Node.js/Express) → MCP Servers\n```\n\n**Architecture highlights:**\n- **No CORS headaches** — Backend handles all MCP connections\n- **Persistent OAuth tokens** — Stored securely in SQLite (`~/.hoot/hoot-mcp.db`)\n- **Session-based auth** — JWT tokens for secure frontend-backend communication\n- **Edge-ready** — Deploy to Cloudflare Workers for global hosting ([guide](./docs/CLOUDFLARE_DEPLOYMENT.md))\n\n### Data Persistence\n\n**On hoot.run:**\n- **Server configs \u0026 tools** — Saved in browser localStorage\n- **OAuth tokens** — Managed by the hosted backend\n- **Chat history** — Preserved in localStorage\n\n**On local (npx/npm):**\n- **Server configs \u0026 tools** — Saved in browser localStorage\n- **OAuth tokens** — Stored in `~/.hoot/hoot-mcp.db` (persists across npx runs)\n- **Chat history** — Preserved in localStorage\n\nYour servers stay configured between sessions!\n\n## Development\n\n**Run from source:**\n\n```bash\ngit clone https://github.com/Portkey-AI/hoot\ncd hoot\nnpm install\nnpm run dev:full\n```\n\n- Backend runs on `localhost:8008`\n- Frontend runs on `localhost:8009`\n\n**Available scripts:**\n- `npm run dev:full` — Run both frontend and backend\n- `npm run backend` — Backend only\n- `npm run dev` — Frontend only\n- `npm run build` — Build for npm distribution\n- `npm run build:cloudflare` — Build for Cloudflare Workers\n\n### Debugging\n\nHoot includes a client-side logger accessible from the browser console:\n\n```javascript\nhootLogger.download()  // Download logs as JSON\nhootLogger.clear()     // Clear logs\n```\n\nBackend logs are written to `backend.log`. See [logging docs](./docs/LOGGING.md) for details.\n\n## Documentation\n\n- **[Quick Start Guide](./docs/QUICKSTART.md)** — Get up and running in 5 minutes\n- **[Try in Hoot](./docs/TRY_IN_HOOT.md)** — Share servers with one-click links\n- **[Authentication](./docs/AUTHENTICATION.md)** — OAuth 2.1 and API key setup\n- **[Themes](./docs/THEMES.md)** — Customize your interface\n- **[Keyboard Shortcuts](./docs/KEYBOARD_SHORTCUTS.md)** — Work faster\n- **[Architecture](./docs/ARCHITECTURE.md)** — How Hoot is built\n- **[Security](./docs/SECURITY.md)** — Security features and best practices\n- **[Cloudflare Deployment](./docs/CLOUDFLARE_DEPLOYMENT.md)** — Deploy to the edge\n\n[📚 Full Documentation](./docs/)\n\n## Why Hoot?\n\n| Feature | Hoot | Manual curl/testing |\n|---------|------|---------------------|\n| **OAuth 2.1 support** | ✅ Automatic discovery \u0026 flow | ❌ Manual token management |\n| **Transport auto-detection** | ✅ HTTP/SSE auto-detected | ❌ Manual configuration |\n| **Visual interface** | ✅ Beautiful UI | ❌ Terminal only |\n| **Tool filtering** | ✅ AI-powered context-aware | ❌ None |\n| **Session persistence** | ✅ Configs \u0026 tokens saved | ❌ Reauth every time |\n| **Share configurations** | ✅ One-click \"Try in Hoot\" links | ❌ Copy-paste configs |\n\n## FAQ\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eDoes Hoot work with all MCP servers?\u003c/strong\u003e\u003c/summary\u003e\n\nYes! Hoot supports both HTTP and SSE transports, OAuth 2.1, and API key authentication. We auto-detect server configurations to make connection as seamless as possible.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eIs my data secure?\u003c/strong\u003e\u003c/summary\u003e\n\nYes. Hoot runs entirely on your local machine. OAuth tokens are stored in a local SQLite database (`~/.hoot/hoot-mcp.db`), and all communication happens over localhost. No data is sent to external servers.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eCan I use Hoot in production?\u003c/strong\u003e\u003c/summary\u003e\n\nHoot is designed for development and testing. For production deployments, you can deploy Hoot to Cloudflare Workers for your team. See our [deployment guide](./docs/CLOUDFLARE_DEPLOYMENT.md).\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eHow do I test servers that require OAuth?\u003c/strong\u003e\u003c/summary\u003e\n\nJust add the server URL. Hoot automatically detects OAuth requirements and guides you through the authorization flow. Tokens are stored securely and refreshed automatically.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eCan I test multiple servers at once?\u003c/strong\u003e\u003c/summary\u003e\n\nAbsolutely! Connect to as many servers as you need. Hoot manages all connections simultaneously and lets you switch between them instantly.\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cstrong\u003eDoes Hoot support resources and prompts?\u003c/strong\u003e\u003c/summary\u003e\n\nNot yet, but they're coming soon! Currently, Hoot focuses on tool testing. Resources and prompts are on our roadmap.\n\u003c/details\u003e\n\n## Roadmap\n\nWe're working towards full MCP specification support. Coming soon:\n\n- **Resources** — MCP resource listing and reading\n- **Prompts** — MCP prompt testing and execution\n- **Electron desktop app** — Native app with stdio transport support\n- **Collaborative workspaces** — Share server configs with teams\n\nWant to contribute? Check out [CONTRIBUTING.md](./CONTRIBUTING.md) or [open an issue](https://github.com/Portkey-AI/hoot/issues) with feature requests!\n\n## Technology Stack\n\n- **Frontend** — React 19, TypeScript, Vite, Zustand\n- **Backend** — Node.js, Express, MCP SDK\n- **Database** — SQLite (better-sqlite3)\n- **Deployment** — npm, Cloudflare Workers + Durable Objects\n- **AI** — Workers AI for semantic tool filtering\n\n## Contributing\n\nWe welcome contributions! Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.\n\n**Ways to contribute:**\n- 🐛 Report bugs and issues\n- 💡 Suggest new features\n- 📝 Improve documentation\n- 🔧 Submit pull requests\n\n## License\n\nMIT License — see [LICENSE](./LICENSE) for details.\n\n---\n\n**Built by [Portkey](https://portkey.ai)** — Making AI development easier, one tool at a time.\n\nMade this because we were tired of curl-ing MCP servers. Hope it helps! 🦉\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fportkey-ai%2Fhoot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fportkey-ai%2Fhoot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fportkey-ai%2Fhoot/lists"}