Skip to main content
Glama
issues.jsonl22.6 kB
{"id":"mcp-browser-use-0ki","title":"Web Dashboard: Skill execution + learn mode","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T05:38:29.990165+01:00","updated_at":"2025-12-24T05:47:44.738893+01:00","closed_at":"2025-12-24T05:47:44.738893+01:00","close_reason":"Completed"} {"id":"mcp-browser-use-21x","title":"SSRF TOCTOU vulnerability via DNS rebinding in skills/runner.py","description":"","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-12-21T01:15:48.159991+01:00","updated_at":"2025-12-21T01:18:48.14742+01:00","closed_at":"2025-12-21T01:18:48.14742+01:00","close_reason":"Fixed in commits f3eeb19, faa3f10, e6cc929, 805ecd6"} {"id":"mcp-browser-use-3uz","title":"SQL injection risk via f-string in observability/store.py","description":"","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-12-21T01:15:54.031213+01:00","updated_at":"2025-12-21T01:18:48.149308+01:00","closed_at":"2025-12-21T01:18:48.149308+01:00","close_reason":"Fixed in commits f3eeb19, faa3f10, e6cc929, 805ecd6"} {"id":"mcp-browser-use-4fm","title":"Recorder cleanup failures cause memory leaks in server.py","description":"","status":"closed","priority":0,"issue_type":"bug","created_at":"2025-12-21T01:15:49.817113+01:00","updated_at":"2025-12-21T01:18:48.148672+01:00","closed_at":"2025-12-21T01:18:48.148672+01:00","close_reason":"Fixed in commits f3eeb19, faa3f10, e6cc929, 805ecd6"} {"id":"mcp-browser-use-5ti","title":"Extract skill_run tool from run_browser_agent","description":"Create a dedicated `skill_run` MCP tool for direct skill execution:\n\n```python\n@server.tool()\nasync def skill_run(\n skill_name: str,\n params: dict[str, Any] | None = None,\n) -\u003e str:\n \"\"\"Execute a skill directly via CDP fetch (no agent, no LLM calls).\n \n Fast execution for verified skills. Fails if:\n - Skill doesn't exist\n - Skill doesn't support direct execution \n - Auth is required (returns error instead of fallback)\n \"\"\"\n```\n\nBenefits:\n- Zero LLM cost for skill execution\n- Predictable execution path\n- Clear separation from agent behavior\n- No implicit fallback confusion\n\nCurrently embedded in run_browser_agent lines 220-280.","status":"open","priority":1,"issue_type":"feature","created_at":"2025-12-18T13:38:56.621815+01:00","updated_at":"2025-12-18T13:39:28.994641+01:00","dependencies":[{"issue_id":"mcp-browser-use-5ti","depends_on_id":"mcp-browser-use-e2b","type":"blocks","created_at":"2025-12-18T13:39:47.433218+01:00","created_by":"daemon"}]} {"id":"mcp-browser-use-9eq","title":"Add Claude Code plugin structure","description":"","status":"closed","priority":2,"issue_type":"feature","created_at":"2025-12-21T01:15:55.47146+01:00","updated_at":"2025-12-21T01:18:48.14988+01:00","closed_at":"2025-12-21T01:18:48.14988+01:00","close_reason":"Fixed in commits f3eeb19, faa3f10, e6cc929, 805ecd6"} {"id":"mcp-browser-use-atl","title":"Architecture alignment with claude-mem patterns","description":"","status":"open","priority":1,"issue_type":"epic","created_at":"2025-12-20T02:28:36.499762+01:00","updated_at":"2025-12-20T02:28:36.499762+01:00"} {"id":"mcp-browser-use-atl.1","title":"Phase 0: Fix transport/install defaults inconsistency","description":"Current state is broken: config.py defaults to stdio, but server.py deprecates it and exits. fastmcp.json says stdio. cli.py install() writes stdio config. STDIO_DEPRECATION_MESSAGE shows wrong port (8000 vs 8383). Fix: 1) Change ServerSettings.transport default to streamable-http in config.py, 2) Update fastmcp.json transport, 3) Fix cli.py install() to write HTTP-based config, 4) Fix hard-coded port in deprecation message. Validation: new user can follow one documented path and connect without hitting stdio deprecation.","status":"open","priority":0,"issue_type":"task","created_at":"2025-12-20T02:29:00.870089+01:00","updated_at":"2025-12-20T02:29:00.870089+01:00","dependencies":[{"issue_id":"mcp-browser-use-atl.1","depends_on_id":"mcp-browser-use-atl","type":"parent-child","created_at":"2025-12-20T02:29:00.873071+01:00","created_by":"daemon"}]} {"id":"mcp-browser-use-atl.2","title":"Phase 1: Daemon keep-alive and health checks","description":"Adopt claude-mem reliability pattern: multi-layer health checks (PID exists + process alive + HTTP responds). Options: 1) Add supervisor.py module with spawn_server_process(), kill_process_tree(), monitor_loop() for crash recovery and proper Windows process tree cleanup, 2) Expose true HTTP /health endpoint (not just MCP tool) returning status/uptime/version/transport/running_tasks, 3) Enhance status command to check all three layers. Validation: if worker dies unexpectedly, it recovers without manual intervention (if supervised); status reflects true health.","status":"open","priority":1,"issue_type":"task","created_at":"2025-12-20T02:29:02.362131+01:00","updated_at":"2025-12-20T02:29:02.362131+01:00","dependencies":[{"issue_id":"mcp-browser-use-atl.2","depends_on_id":"mcp-browser-use-atl","type":"parent-child","created_at":"2025-12-20T02:29:02.364602+01:00","created_by":"daemon"},{"issue_id":"mcp-browser-use-atl.2","depends_on_id":"mcp-browser-use-atl.1","type":"blocks","created_at":"2025-12-20T02:29:23.397902+01:00","created_by":"daemon"}]} {"id":"mcp-browser-use-atl.3","title":"Phase 2: Add minimal web viewer","description":"Add claude-mem style web viewer served by the daemon. Minimal scope: static HTML+JS (no React/bundling), served from package resources. Endpoints: GET / (viewer HTML), GET /api/tasks, GET /api/tasks/{id}, POST /api/tasks/{id}/cancel, GET /stream (SSE). SSE events: task_created, task_updated, task_completed. Security: localhost-only by default, require auth_token for non-localhost. No sensitive data exposure (use existing header redaction patterns). Files: viewer/assets/viewer.html, viewer/routes.py, observability/api.py facade.","status":"open","priority":2,"issue_type":"feature","created_at":"2025-12-20T02:29:04.161251+01:00","updated_at":"2025-12-20T02:29:04.161251+01:00","dependencies":[{"issue_id":"mcp-browser-use-atl.3","depends_on_id":"mcp-browser-use-atl","type":"parent-child","created_at":"2025-12-20T02:29:04.163359+01:00","created_by":"daemon"},{"issue_id":"mcp-browser-use-atl.3","depends_on_id":"mcp-browser-use-atl.2","type":"blocks","created_at":"2025-12-20T02:29:23.489261+01:00","created_by":"daemon"}]} {"id":"mcp-browser-use-atl.4","title":"Add doctor command for setup validation","description":"Add 'mcp-server-browser-use doctor' command that checks: API key availability, Playwright browser availability, config readability, port availability, filesystem writability for state/log dirs. Provides actionable error messages. Optionally add 'setup' command that runs Playwright install and writes baseline config.","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-20T02:29:06.777393+01:00","updated_at":"2025-12-20T02:29:06.777393+01:00","dependencies":[{"issue_id":"mcp-browser-use-atl.4","depends_on_id":"mcp-browser-use-atl","type":"parent-child","created_at":"2025-12-20T02:29:06.780406+01:00","created_by":"daemon"}]} {"id":"mcp-browser-use-atl.5","title":"Phase 3: Decide CLI-first vs Hybrid vs Web-first UX","description":"Decision point after Phase 2: A) CLI-first (minimal viewer, lowest maintenance), B) Hybrid (CLI for lifecycle/config, viewer for monitoring/control - recommended, mirrors claude-mem), C) Web-first (CLI only start/stop, viewer dominant with config editing - highest complexity). Affects: what features to build, security/auth hardening scope, API stability commitments. Recommendation: Option B (Hybrid).","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-20T02:29:21.077317+01:00","updated_at":"2025-12-20T02:29:21.077317+01:00","dependencies":[{"issue_id":"mcp-browser-use-atl.5","depends_on_id":"mcp-browser-use-atl","type":"parent-child","created_at":"2025-12-20T02:29:21.079717+01:00","created_by":"daemon"},{"issue_id":"mcp-browser-use-atl.5","depends_on_id":"mcp-browser-use-atl.3","type":"blocks","created_at":"2025-12-20T02:29:23.580972+01:00","created_by":"daemon"}]} {"id":"mcp-browser-use-b8a","title":"Add concurrent task tracking tests","description":"Add tests for concurrent agent execution:\n\n1. Multiple tasks running simultaneously\n - Each task gets unique task_id\n - Task store correctly tracks all tasks\n - No cross-contamination of results\n\n2. Task status isolation \n - Canceling one task doesn't affect others\n - Failed task doesn't corrupt others' state\n - Progress updates isolated per task\n\n3. Logging isolation\n - Each task logs to correct context\n - No interleaved log entries\n\n4. Results storage\n - Results saved to correct files when results_dir configured\n - No overwriting between concurrent tasks\n\nTest cases:\n- test_concurrent_browser_agents\n- test_concurrent_task_cancellation \n- test_concurrent_results_isolation\n- test_concurrent_progress_tracking","status":"open","priority":2,"issue_type":"task","created_at":"2025-12-18T13:39:05.888549+01:00","updated_at":"2025-12-18T13:39:38.871454+01:00"} {"id":"mcp-browser-use-beo","title":"Plugin Architecture Migration","description":"Migrate mcp-browser-use from standalone MCP server to Claude Code plugin with auto-install, persistent daemon, and bundled web UI. Decisions: (1) Daemon runs persistently, hooks check/start if needed, (2) stdio MCP wrapper → HTTP daemon pattern, (3) smart-install.py for Playwright auto-setup, (4) Web UI bundled in plugin.","status":"open","priority":1,"issue_type":"epic","created_at":"2025-12-20T18:11:30.302725+01:00","updated_at":"2025-12-20T18:11:30.302725+01:00"} {"id":"mcp-browser-use-beo.1","title":"Create plugin directory structure","description":"Create .claude-plugin/, hooks/, scripts/, skills/, ui/ directories. Add plugin.json manifest with name, version, description, author, repository, license, keywords. Add marketplace.json for distribution.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T18:12:00.618699+01:00","updated_at":"2025-12-20T18:18:20.578476+01:00","closed_at":"2025-12-20T18:18:20.578476+01:00","close_reason":"Created plugin structure: .claude-plugin/, hooks/, scripts/, skills/, ui/ with plugin.json and marketplace.json","dependencies":[{"issue_id":"mcp-browser-use-beo.1","depends_on_id":"mcp-browser-use-beo","type":"parent-child","created_at":"2025-12-20T18:12:00.623959+01:00","created_by":"daemon"}]} {"id":"mcp-browser-use-beo.2","title":"Create stdio MCP wrapper that forwards to HTTP daemon","description":"Create scripts/mcp-server.py - a stdio-based MCP server that forwards all tool calls to the HTTP daemon at localhost:8383. This follows claude-mem's pattern where the MCP server is lightweight and the daemon does the heavy lifting. The wrapper handles JSON-RPC over stdin/stdout.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T18:12:02.30648+01:00","updated_at":"2025-12-20T18:23:12.956685+01:00","closed_at":"2025-12-20T18:23:12.956685+01:00","close_reason":"Created scripts/mcp-server.py - stdio wrapper forwarding 11 tools to HTTP daemon","dependencies":[{"issue_id":"mcp-browser-use-beo.2","depends_on_id":"mcp-browser-use-beo","type":"parent-child","created_at":"2025-12-20T18:12:02.308729+01:00","created_by":"daemon"},{"issue_id":"mcp-browser-use-beo.2","depends_on_id":"mcp-browser-use-beo.1","type":"blocks","created_at":"2025-12-20T18:12:24.66283+01:00","created_by":"daemon"}]} {"id":"mcp-browser-use-beo.3","title":"Create smart-install.py for first-time setup","description":"Create scripts/smart-install.py that runs on SessionStart hook. Checks: (1) Python/uv available, (2) Playwright browsers installed - if not, runs 'playwright install chromium', (3) Config directory exists, (4) Default config created if missing. Should be idempotent and fast on subsequent runs.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T18:12:03.985508+01:00","updated_at":"2025-12-20T18:23:13.055952+01:00","closed_at":"2025-12-20T18:23:13.055952+01:00","close_reason":"Created scripts/smart-install.py - checks Playwright and config, auto-installs if needed","dependencies":[{"issue_id":"mcp-browser-use-beo.3","depends_on_id":"mcp-browser-use-beo","type":"parent-child","created_at":"2025-12-20T18:12:03.987724+01:00","created_by":"daemon"},{"issue_id":"mcp-browser-use-beo.3","depends_on_id":"mcp-browser-use-beo.1","type":"blocks","created_at":"2025-12-20T18:12:24.77613+01:00","created_by":"daemon"}]} {"id":"mcp-browser-use-beo.4","title":"Create daemon-check hook for SessionStart","description":"Create scripts/daemon-check.py and hooks/hooks.json. On SessionStart: check if HTTP daemon is running (health check to localhost:8383/health), if not running start it in background. Daemon should be persistent (survives Claude Code restart). Use PID file for tracking. Return hookSpecificOutput with daemon status.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T18:12:05.687835+01:00","updated_at":"2025-12-20T18:23:13.151813+01:00","closed_at":"2025-12-20T18:23:13.151813+01:00","close_reason":"Created scripts/daemon-check.py and hooks/hooks.json - ensures daemon running on SessionStart","dependencies":[{"issue_id":"mcp-browser-use-beo.4","depends_on_id":"mcp-browser-use-beo","type":"parent-child","created_at":"2025-12-20T18:12:05.691445+01:00","created_by":"daemon"},{"issue_id":"mcp-browser-use-beo.4","depends_on_id":"mcp-browser-use-beo.1","type":"blocks","created_at":"2025-12-20T18:12:24.880498+01:00","created_by":"daemon"}]} {"id":"mcp-browser-use-beo.5","title":"Create .mcp.json with stdio server config","description":"Create .mcp.json that registers the stdio MCP wrapper: {\"browser-use\": {\"type\": \"stdio\", \"command\": \"${CLAUDE_PLUGIN_ROOT}/scripts/mcp-server.py\"}}. This replaces manual MCP installation - plugin install auto-registers the MCP server.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-20T18:12:07.285613+01:00","updated_at":"2025-12-20T18:25:01.745531+01:00","closed_at":"2025-12-20T18:25:01.745531+01:00","close_reason":"Created .mcp.json registering browser-use stdio server with PYTHONPATH","dependencies":[{"issue_id":"mcp-browser-use-beo.5","depends_on_id":"mcp-browser-use-beo","type":"parent-child","created_at":"2025-12-20T18:12:07.288086+01:00","created_by":"daemon"},{"issue_id":"mcp-browser-use-beo.5","depends_on_id":"mcp-browser-use-beo.2","type":"blocks","created_at":"2025-12-20T18:12:24.980879+01:00","created_by":"daemon"}]} {"id":"mcp-browser-use-beo.6","title":"Bundle web viewer UI in plugin","description":"Create ui/viewer.html and ui/viewer-bundle.js (or inline JS). Web UI served by HTTP daemon at localhost:8383. Shows: task list, task details, live status via SSE. Static HTML + vanilla JS (no build toolchain). Light/dark theme support. This is Phase 2 from beads-0003.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-20T18:12:08.74602+01:00","updated_at":"2025-12-20T19:26:55.208381+01:00","closed_at":"2025-12-20T19:26:55.208381+01:00","close_reason":"Created ui/viewer.html with task list, details, health indicator, auto-refresh, dark mode. Added /api/* REST endpoints and / route to serve UI.","dependencies":[{"issue_id":"mcp-browser-use-beo.6","depends_on_id":"mcp-browser-use-beo","type":"parent-child","created_at":"2025-12-20T18:12:08.747886+01:00","created_by":"daemon"},{"issue_id":"mcp-browser-use-beo.6","depends_on_id":"mcp-browser-use-beo.4","type":"blocks","created_at":"2025-12-20T18:12:25.077183+01:00","created_by":"daemon"}]} {"id":"mcp-browser-use-beo.7","title":"Create SKILL.md for browser-use skill","description":"Create skills/browser-use/SKILL.md with YAML frontmatter and documentation. Describes available MCP tools (run_browser_agent, run_deep_research, skill_list/get/delete, health_check, task_list/get/cancel). Includes usage examples, parameter documentation, common workflows.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-20T18:12:10.296876+01:00","updated_at":"2025-12-20T18:23:13.248589+01:00","closed_at":"2025-12-20T18:23:13.248589+01:00","close_reason":"Created skills/browser-use/SKILL.md - documented 9 tools with examples and workflows","dependencies":[{"issue_id":"mcp-browser-use-beo.7","depends_on_id":"mcp-browser-use-beo","type":"parent-child","created_at":"2025-12-20T18:12:10.298938+01:00","created_by":"daemon"},{"issue_id":"mcp-browser-use-beo.7","depends_on_id":"mcp-browser-use-beo.1","type":"blocks","created_at":"2025-12-20T18:12:25.17194+01:00","created_by":"daemon"}]} {"id":"mcp-browser-use-beo.8","title":"Publish to marketplace","description":"Create GitHub release with plugin files. Update marketplace.json with version and source. Document installation: '/plugin marketplace add igortarasenko/mcp-browser-use' then '/plugin install mcp-browser-use'. Test full install flow from scratch.","status":"open","priority":3,"issue_type":"task","created_at":"2025-12-20T18:12:11.796141+01:00","updated_at":"2025-12-20T18:12:11.796141+01:00","dependencies":[{"issue_id":"mcp-browser-use-beo.8","depends_on_id":"mcp-browser-use-beo","type":"parent-child","created_at":"2025-12-20T18:12:11.798073+01:00","created_by":"daemon"},{"issue_id":"mcp-browser-use-beo.8","depends_on_id":"mcp-browser-use-beo.5","type":"blocks","created_at":"2025-12-20T18:12:25.278906+01:00","created_by":"daemon"},{"issue_id":"mcp-browser-use-beo.8","depends_on_id":"mcp-browser-use-beo.6","type":"blocks","created_at":"2025-12-20T18:12:25.381884+01:00","created_by":"daemon"},{"issue_id":"mcp-browser-use-beo.8","depends_on_id":"mcp-browser-use-beo.7","type":"blocks","created_at":"2025-12-20T18:12:25.483496+01:00","created_by":"daemon"}]} {"id":"mcp-browser-use-de2","title":"Web Dashboard: Skill management UI","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T05:38:29.856464+01:00","updated_at":"2025-12-24T05:47:44.736761+01:00","closed_at":"2025-12-24T05:47:44.736761+01:00","close_reason":"Completed"} {"id":"mcp-browser-use-e2b","title":"Add skills.enabled config flag (default: false for beta)","description":"Add config flag to enable/disable skills module:\n\n```python\nclass SkillsSettings(BaseSettings):\n enabled: bool = False # Beta - disabled by default\n directory: str | None = None\n```\n\nWhen disabled:\n- skill_* tools not registered\n- run_browser_agent ignores skill_name parameter\n- No skill learning even with learn=True\n\nThis allows stable use of agent and deep_research while skills mature.\n\nConfig example:\n```json\n{\n \"skills\": {\n \"enabled\": true,\n \"directory\": \"~/.config/browser-skills\"\n }\n}\n```","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-18T13:39:03.059636+01:00","updated_at":"2025-12-18T14:02:39.797763+01:00","closed_at":"2025-12-18T14:02:39.797763+01:00","close_reason":"Implemented skills.enabled config flag with default=False. When disabled: skill_* tools not registered, skill_name/learn params ignored in run_browser_agent, skill components not initialized."} {"id":"mcp-browser-use-fn0","title":"Web Dashboard: SSE real-time updates","description":"","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-24T05:38:30.177258+01:00","updated_at":"2025-12-24T05:51:33.777945+01:00","closed_at":"2025-12-24T05:51:33.777945+01:00","close_reason":"Completed"} {"id":"mcp-browser-use-iiz","title":"Web Dashboard: History + polish","description":"","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-24T05:38:30.306563+01:00","updated_at":"2025-12-24T05:51:33.779503+01:00","closed_at":"2025-12-24T05:51:33.779503+01:00","close_reason":"Completed"} {"id":"mcp-browser-use-kn0","title":"Extract skill_learn tool from run_browser_agent","description":"Create a dedicated `skill_learn` MCP tool for skill extraction:\n\n```python\n@server.tool()\nasync def skill_learn(\n task: str,\n max_steps: int = 15,\n) -\u003e str:\n \"\"\"Run browser agent in learning mode to extract a reusable skill.\n \n Returns the learned skill YAML on success.\n \"\"\"\n```\n\nCurrently embedded in run_browser_agent with `learn=True` parameter.\n\nThis separates concerns:\n- run_browser_agent: Execute tasks (optionally with skill hints)\n- skill_learn: Dedicated skill extraction workflow\n- skill_run: Direct skill execution","status":"open","priority":1,"issue_type":"feature","created_at":"2025-12-18T13:39:00.072194+01:00","updated_at":"2025-12-18T13:39:31.879348+01:00","dependencies":[{"issue_id":"mcp-browser-use-kn0","depends_on_id":"mcp-browser-use-e2b","type":"blocks","created_at":"2025-12-18T13:39:47.546697+01:00","created_by":"daemon"}]} {"id":"mcp-browser-use-lpg","title":"Config parse errors silently ignored in config.py","description":"","status":"open","priority":1,"issue_type":"bug","created_at":"2025-12-21T01:15:51.277559+01:00","updated_at":"2025-12-21T01:15:51.277559+01:00"} {"id":"mcp-browser-use-n80","title":"Task cancellation race condition in server.py","description":"","status":"open","priority":1,"issue_type":"bug","created_at":"2025-12-21T01:15:52.632329+01:00","updated_at":"2025-12-21T01:15:52.632329+01:00"} {"id":"mcp-browser-use-nrp","title":"Web Dashboard: Dashboard shell with htmx","description":"","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-24T05:38:29.720791+01:00","updated_at":"2025-12-24T05:44:10.84454+01:00","closed_at":"2025-12-24T05:44:10.84454+01:00","close_reason":"Completed"} {"id":"mcp-browser-use-qwl","title":"Add user_data_dir browser profile support","description":"Add user_data_dir option to BrowserSettings to allow using existing Chrome profile with cookies, logins, extensions. Should integrate with browser-use library's profile support.","status":"closed","priority":1,"issue_type":"feature","created_at":"2025-12-20T21:19:29.184205+01:00","updated_at":"2025-12-20T21:23:13.169434+01:00","closed_at":"2025-12-20T21:23:13.169434+01:00","close_reason":"Added user_data_dir to BrowserSettings, passed to BrowserProfile. Validated: config field works, BrowserProfile accepts it."} {"id":"mcp-browser-use-zep","title":"Web Dashboard: REST API for skills","description":"","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-24T05:38:29.587055+01:00","updated_at":"2025-12-24T05:44:10.84178+01:00","closed_at":"2025-12-24T05:44:10.84178+01:00","close_reason":"Completed"}

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Saik0s/mcp-browser-use'

If you have feedback or need assistance with the MCP directory API, please join our Discord server