-
Notifications
You must be signed in to change notification settings - Fork 214
feat(health): enhance health check to report database connection status #109
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(health): enhance health check to report database connection status #109
Conversation
Work in progress . This commit adds the core registry service implementation with methods to: - Retrieve all registry entries - List entries with cursor-based pagination - Fetch specific server details by ID
…pi_v0 Init world. Basic registry API server <WIP>
…eadme-cleanup Update README to reflect binary name change
…ridharavinash/seed Add count to server response and fix Makefile paths
…retrieval is validated
…pi-docs Add Swagger API documentation and handlers for v0
Contains about 300+ initial servers that can be used to seed a mongoDB
We need to work in multiple orgs with different private repos, this is a temporary solution until we make the main repo public.
…blishing - Added authentication service and GitHub OAuth integration. - Introduced new authentication methods and structures in the model. - Updated the API to handle authentication during the publishing process. - Created handlers for starting and checking the status of the OAuth flow. - Enhanced the publish handler to validate authentication credentials. - Updated configuration to include GitHub OAuth settings. - Added tests for the OAuth flow and publishing with authentication. - Updated documentation to reflect changes in the API and authentication process.
…e argument descriptions
…cation and update documentation
…b application and improve error handling
…ecks and introducing dynamic auth method determination
…nce error handling
…ons as much as possible. Fix the tests to let the DB generate the server uuids rather than setting them up in the test.
- Added error handling for JSON encoding in ServersHandler and ServersDetailHandler. - Updated test cases to reflect changes in handler functions and improved mock expectations. - Refactored server initialization to include ReadHeaderTimeout for better request handling. - Modified GitHubDeviceAuth to accept context in ValidateToken and checkOrgMembership methods. - Improved error messages in database import functions for better debugging. - Updated memory and mongo database list functions to accept context and improved filtering logic. - Enhanced logging in publisher tool for better visibility during execution. - Cleaned up code formatting and comments for better readability and maintainability.
This pull request introduces significant updates to the authentication system for the MCP Registry Publisher Tool. The changes focus on transitioning to an interface-based authentication system, implementing GitHub OAuth device flow as the default authentication method, and restructuring the codebase for better modularity and extensibility. Adding an interface to the publishing CLI, so that it'll be easier to add more auth methods as they become available.
<!-- Provide a brief summary of your changes --> Rename mcp.json to server.json ## Motivation and Context <!-- Why is this change needed? What problem does it solve? --> ## How Has This Been Tested? <!-- Have you tested this in a real application? Which scenarios were tested? --> ## Breaking Changes <!-- Will users need to update their code or configurations? --> ## Types of changes <!-- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> - [ ] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Documentation update ## Checklist <!-- Go over all the following points, and put an `x` in all the boxes that apply. --> - [ ] I have read the [MCP Documentation](https://modelcontextprotocol.io) - [ ] My code follows the repository's style guidelines - [ ] New and existing tests pass locally - [ ] I have added appropriate error handling - [ ] I have added or updated documentation as needed ## Additional context <!-- Add any other context, implementation notes, or design decisions --> Related to modelcontextprotocol#86 Co-authored-by: Avinash Sridhar <[email protected]>
) <!-- Provide a brief summary of your changes --> Add support for specifying database type (MongoDB or in-memory database). ## Motivation and Context <!-- Why is this change needed? What problem does it solve? --> The README states that MCP Registry supports both MongoDB and in-memory databases, but does not provide the capability to specify which database type to use. https://github.com/modelcontextprotocol/registry/blob/5d9171bdccf579398273806a7067cda29e88363c/README.md?plain=1#L19 This PR addresses this limitation by adding explicit database type configuration through the `DATABASE_TYPE` environment variable, allowing users to choose between `mongodb` and `memory` database types in a standardized way. ## How Has This Been Tested? <!-- Have you tested this in a real application? Which scenarios were tested? --> Yes ```console $ export MCP_REGISTRY_DATABASE_TYPE="memory" $ ./scripts/test_endpoints.sh Testing health endpoint: http://localhost:8080/v0/health Status Code: 200 Response: { "status": "ok", "github_client_id": "" } Health check successful ------------------------------------- Testing servers endpoint: http://localhost:8080/v0/servers Status Code: 200 Response Summary: Total registries: 0 servers Names: Pagination Metadata: {} servers Details: { "servers": [], "metadata": {} } servers request successful ------------------------------------- Testing ping endpoint: http://localhost:8080/v0/ping Status Code: 200 Response: { "status": "ok", "version": "dev" } Ping successful ------------------------------------- All tests passed successfully! ``` ## Breaking Changes <!-- Will users need to update their code or configurations? --> No ## Types of changes <!-- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> - [ ] Bug fix (non-breaking change which fixes an issue) - [x] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [x] Documentation update ## Checklist <!-- Go over all the following points, and put an `x` in all the boxes that apply. --> - [x] I have read the [MCP Documentation](https://modelcontextprotocol.io) - [x] My code follows the repository's style guidelines - [x] New and existing tests pass locally - [x] I have added appropriate error handling - [x] I have added or updated documentation as needed ## Additional context <!-- Add any other context, implementation notes, or design decisions --> Close modelcontextprotocol#63 --------- Co-authored-by: Avinash Sridhar <[email protected]> Co-authored-by: Copilot <[email protected]>
…textprotocol#128) <!-- Provide a brief summary of your changes --> Add SeedFile import support for memory database to ensure consistent seed data loading across both MongoDB and memory modes. ## Motivation and Context <!-- Why is this change needed? What problem does it solve? --> Previously, SeedFile import was only available when using MongoDB. After memory database support was added, it lacked this feature, leading to inconsistent behavior and missing seed data during development or testing. This PR solves the problem by enabling the application to load SeedFile data even when running with a memory database, ensuring consistency and improving the developer/testing experience. ## How Has This Been Tested? <!-- Have you tested this in a real application? Which scenarios were tested? --> ```bash $ export MCP_REGISTRY_DATABASE_TYPE="memory" $ ./scripts/test_endpoints.sh ================================================== MCP Registry Endpoint Test Script ================================================== This script expects the MCP Registry server to be running locally. Please ensure the server is started using one of the following methods: • Docker Compose: docker compose up • Direct execution: go run cmd/registry/main.go • Built binary: ./build/registry ================================================== Testing health endpoint: http://localhost:8080/v0/health Status Code: 200 Response: { "status": "ok", "github_client_id": "" } Health check successful ------------------------------------- Testing servers endpoint: http://localhost:8080/v0/servers Status Code: 200 Response Summary: Total registries: 30 servers Names: io.github.appcypher/awesome-mcp-servers io.github.kenjihikmatullah/productboard-mcp io.github.kyrietangsheng/mcp-server-nationalparks io.github.gongrzhe/redis-mcp-server io.github.zubeidhendricks/youtube-mcp-server io.github.zzaebok/mcp-wikidata io.github.ihor-sokoliuk/mcp-searxng io.github.sv/mcp-paradex-py io.github.felores/airtable-mcp io.github.eqtylab/mcp-guardian io.github.co-browser/attestable-mcp-server io.github.ubie-oss/mcp-vertexai-search io.github.kukapay/crypto-indicators-mcp io.github.pinecone-io/assistant-mcp io.github.metricool/mcp-metricool io.github.r-huijts/strava-mcp io.github.googleapis/genai-toolbox io.github.wilsonchenghy/shadertoy-mcp io.github.klavis-ai/klavis io.github.fireproof-storage/mcp-database-server io.github.xxxbrian/mcp-rquest io.github.geropl/linear-mcp-go io.github.amornpan/py-mcp-mssql io.github.chaindead/telegram-mcp io.github.bazinga012/mcp_code_executor io.github.lharries/whatsapp-mcp io.github.mektigboy/server-hyperliquid io.github.omar-v2/mcp-ical io.github.open-strategy-partners/osp_marketing_tools io.github.smn2gnt/mcp-salesforce Pagination Metadata: { "next_cursor": "0e45cb5a-5b45-47f3-8b5e-12bdf88d176a", "count": 30 } servers Details: { "servers": [ { "id": "0007544a-3948-4934-866b-b4a96fe53b55", "name": "io.github.appcypher/awesome-mcp-servers", "description": "Awesome MCP Servers - A curated list of Model Context Protocol servers", "repository": { "url": "https://github.com/appcypher/awesome-mcp-servers", "source": "github", "id": "895801050" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:16:40Z", "is_latest": true } }, { "id": "00613acb-73e2-4f93-8b96-296df17316c8", "name": "io.github.kenjihikmatullah/productboard-mcp", "description": "Integrate the Productboard API into agentic workflows via MCP", "repository": { "url": "https://github.com/kenjihikmatullah/productboard-mcp", "source": "github", "id": "939104710" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:12:44Z", "is_latest": true } }, { "id": "010904ec-6e39-4bdc-878a-75a6e79d0500", "name": "io.github.kyrietangsheng/mcp-server-nationalparks", "description": "", "repository": { "url": "https://github.com/KyrieTangSheng/mcp-server-nationalparks", "source": "github", "id": "951713109" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:11:05Z", "is_latest": true } }, { "id": "01129bff-3d65-4e3d-8e82-6f2f269f818c", "name": "io.github.gongrzhe/redis-mcp-server", "description": "A Redis MCP server (pushed to https://github.com/modelcontextprotocol/servers/tree/main/src/redis) implementation for interacting with Redis databases. This server enables LLMs to interact with Redis key-value stores through a set of standardized tools.", "repository": { "url": "https://github.com/GongRzhe/REDIS-MCP-Server", "source": "github", "id": "907849235" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:13:21Z", "is_latest": true } }, { "id": "0278fd92-a009-4a47-a6df-5f77db37e6ab", "name": "io.github.zubeidhendricks/youtube-mcp-server", "description": "MCP Server for YouTube API, enabling video management, Shorts creation, and advanced analytics", "repository": { "url": "https://github.com/ZubeidHendricks/youtube-mcp-server", "source": "github", "id": "909607678" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:16:14Z", "is_latest": true } }, { "id": "02b79b89-cce8-4401-aa1f-255b01587266", "name": "io.github.zzaebok/mcp-wikidata", "description": "A server implementation for Wikidata API using the Model Context Protocol (MCP).", "repository": { "url": "https://github.com/zzaebok/mcp-wikidata", "source": "github", "id": "959274715" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:15:49Z", "is_latest": true } }, { "id": "02cdb980-1dcd-4345-a8d1-d3f3f522d04b", "name": "io.github.ihor-sokoliuk/mcp-searxng", "description": "MCP Server for SearXNG", "repository": { "url": "https://github.com/ihor-sokoliuk/mcp-searxng", "source": "github", "id": "907172461" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:13:48Z", "is_latest": true } }, { "id": "038a3024-c319-4a07-bd7f-9cf699cfebf1", "name": "io.github.sv/mcp-paradex-py", "description": "Connect AI agents to the Paradex trading platform. Retrieve market data, manage accounts, and execute trades seamlessly. Enhance your trading experience with automated tools and real-time insights.", "repository": { "url": "https://github.com/sv/mcp-paradex-py", "source": "github", "id": "944258239" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:12:24Z", "is_latest": true } }, { "id": "04216a87-0760-4f25-b809-42ffbfbb8962", "name": "io.github.felores/airtable-mcp", "description": "Search, create and update Airtable bases, tables, fields, and records using Claude Desktop and MCP (Model Context Protocol) clients", "repository": { "url": "https://github.com/felores/airtable-mcp", "source": "github", "id": "904238387" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:02:48Z", "is_latest": true } }, { "id": "04b4489b-db48-4aaa-98f6-036bcf5fd483", "name": "io.github.eqtylab/mcp-guardian", "description": "Manage / Proxy / Secure your MCP Servers", "repository": { "url": "https://github.com/eqtylab/mcp-guardian", "source": "github", "id": "926222936" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:16:58Z", "is_latest": true } }, { "id": "05ca6ccc-d6e1-47ab-ab8d-25949db9ada7", "name": "io.github.co-browser/attestable-mcp-server", "description": "Verify that any MCP server is running the intended and untampered code via hardware attestation.", "repository": { "url": "https://github.com/co-browser/attestable-mcp-server", "source": "github", "id": "955641588" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:03:19Z", "is_latest": true } }, { "id": "07ccf835-680a-42b4-bf0b-db28367519ee", "name": "io.github.ubie-oss/mcp-vertexai-search", "description": "A MCP server for Vertex AI Search", "repository": { "url": "https://github.com/ubie-oss/mcp-vertexai-search", "source": "github", "id": "934580342" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:07:44Z", "is_latest": true } }, { "id": "0852caec-a861-4f9c-9e94-a7c8b67a1641", "name": "io.github.kukapay/crypto-indicators-mcp", "description": "An MCP server providing a range of cryptocurrency technical analysis indicators and strategies.", "repository": { "url": "https://github.com/kukapay/crypto-indicators-mcp", "source": "github", "id": "953321792" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:05:01Z", "is_latest": true } }, { "id": "08668c6a-c2f6-47b0-a4e0-75a8ee9bcf10", "name": "io.github.pinecone-io/assistant-mcp", "description": "Pinecone Assistant MCP server", "repository": { "url": "https://github.com/pinecone-io/assistant-mcp", "source": "github", "id": "940446625" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:01:06Z", "is_latest": true } }, { "id": "091ef217-8e6d-4e06-8cb9-bc5ffe5467b1", "name": "io.github.metricool/mcp-metricool", "description": "This is a Multi-Agent Collaboration Protocol (MCP) server for interacting with the Metricool API. It allows AI agents to access and analyze social media metrics and campaign data from your Metricool account.", "repository": { "url": "https://github.com/metricool/mcp-metricool", "source": "github", "id": "967888435" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:10:11Z", "is_latest": true } }, { "id": "09a2ecf8-1774-490e-8542-2b25a6445a58", "name": "io.github.r-huijts/strava-mcp", "description": "A Model Context Protocol (MCP) server that connects to Strava API, providing tools to access Strava data through LLMs", "repository": { "url": "https://github.com/r-huijts/strava-mcp", "source": "github", "id": "961429605" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:14:17Z", "is_latest": true } }, { "id": "09f19715-3a0c-4900-932b-1ff0035aff11", "name": "io.github.googleapis/genai-toolbox", "description": "MCP Toolbox for Databases is an open source MCP server for databases.", "repository": { "url": "https://github.com/googleapis/genai-toolbox", "source": "github", "id": "812044182" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:00:18Z", "is_latest": true } }, { "id": "0b245c5f-ba2b-4e8d-b9db-26681b0fa2e3", "name": "io.github.wilsonchenghy/shadertoy-mcp", "description": "", "repository": { "url": "https://github.com/wilsonchenghy/ShaderToy-MCP", "source": "github", "id": "958998300" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:14:23Z", "is_latest": true } }, { "id": "0bc33e11-876e-4b0f-9c72-75c126d89978", "name": "io.github.klavis-ai/klavis", "description": "Klavis AI (YC X25): Open Source MCP integration for AI applications", "repository": { "url": "https://github.com/Klavis-AI/klavis", "source": "github", "id": "965974441" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T18:59:59Z", "is_latest": true } }, { "id": "0bee6074-d16a-4482-a315-5b8f0f1abcf1", "name": "io.github.fireproof-storage/mcp-database-server", "description": "Store and load JSON documents from LLM tool use", "repository": { "url": "https://github.com/fireproof-storage/mcp-database-server", "source": "github", "id": "904432283" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T18:58:57Z", "is_latest": true } }, { "id": "0c43f128-7589-4ce6-9382-5399ba24bebd", "name": "io.github.xxxbrian/mcp-rquest", "description": "A MCP server providing realistic browser-like HTTP request capabilities with accurate TLS/JA3/JA4 fingerprints for bypassing anti-bot measures. It also supports converting PDF and HTML documents to Markdown for easier processing by LLMs.", "repository": { "url": "https://github.com/xxxbrian/mcp-rquest", "source": "github", "id": "950863558" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:13:30Z", "is_latest": true } }, { "id": "0c8e4aae-53ed-4acf-87d9-19d44ac4afd1", "name": "io.github.geropl/linear-mcp-go", "description": "linear MCP server based on mcp-go", "repository": { "url": "https://github.com/geropl/linear-mcp-go", "source": "github", "id": "940084523" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:09:19Z", "is_latest": true } }, { "id": "0c9a70a7-7523-42b7-a951-b4c4b8077710", "name": "io.github.amornpan/py-mcp-mssql", "description": "py-mcp-mssql", "repository": { "url": "https://github.com/amornpan/py-mcp-mssql", "source": "github", "id": "922607489" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:10:17Z", "is_latest": true } }, { "id": "0cd13ce0-2f67-414a-afb1-4e11dd3e4cba", "name": "io.github.chaindead/telegram-mcp", "description": "Telegram MCP for managing dialogs, messages, drafts, read statuses, and more.", "repository": { "url": "https://github.com/chaindead/telegram-mcp", "source": "github", "id": "958652024" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:14:34Z", "is_latest": true } }, { "id": "0cdfed38-6495-42a3-a837-3788f35aadd3", "name": "io.github.bazinga012/mcp_code_executor", "description": "The MCP Code Executor is an MCP server that allows LLMs to execute Python code within a specified Conda environment.", "repository": { "url": "https://github.com/bazinga012/mcp_code_executor", "source": "github", "id": "928420039" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:04:37Z", "is_latest": true } }, { "id": "0d2cbcc1-4b34-4b2b-af66-595d8fb5e78a", "name": "io.github.lharries/whatsapp-mcp", "description": "WhatsApp MCP server", "repository": { "url": "https://github.com/lharries/whatsapp-mcp", "source": "github", "id": "957053334" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:15:45Z", "is_latest": true } }, { "id": "0d57edf7-3fbb-42b4-aa9e-b255e7d6f8fa", "name": "io.github.mektigboy/server-hyperliquid", "description": "MCP Hyperliquid (https://app.hyperliquid.xyz) server", "repository": { "url": "https://github.com/mektigboy/server-hyperliquid", "source": "github", "id": "943734921" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:08:12Z", "is_latest": true } }, { "id": "0d7bc864-fdf3-4afd-8b44-48468b12d550", "name": "io.github.omar-v2/mcp-ical", "description": "A Model Context Protocol Server that allows you to interact with your MacOS Calendar through natural language.", "repository": { "url": "https://github.com/Omar-V2/mcp-ical", "source": "github", "id": "930007673" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:03:05Z", "is_latest": true } }, { "id": "0d8b287c-6023-4809-a5ba-963c5612efa2", "name": "io.github.open-strategy-partners/osp_marketing_tools", "description": "A Model Context Protocol (MCP) server that empowers LLMs to use some of Open Srategy Partners' core writing and product marketing techniques.", "repository": { "url": "https://github.com/open-strategy-partners/osp_marketing_tools", "source": "github", "id": "917730483" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:12:14Z", "is_latest": true } }, { "id": "0e45cb5a-5b45-47f3-8b5e-12bdf88d176a", "name": "io.github.smn2gnt/mcp-salesforce", "description": "MCP Salesforce connector", "repository": { "url": "https://github.com/smn2gnt/MCP-Salesforce", "source": "github", "id": "904538810" }, "version_detail": { "version": "0.0.1-seed", "release_date": "2025-05-16T19:13:41Z", "is_latest": true } } ], "metadata": { "next_cursor": "0e45cb5a-5b45-47f3-8b5e-12bdf88d176a", "count": 30 } } servers request successful ------------------------------------- Testing ping endpoint: http://localhost:8080/v0/ping Status Code: 200 Response: { "status": "ok", "version": "dev" } Ping successful ------------------------------------- All tests passed successfully! ``` ## Breaking Changes <!-- Will users need to update their code or configurations? --> No ## Types of changes <!-- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> - [ ] Bug fix (non-breaking change which fixes an issue) - [x] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Documentation update ## Checklist <!-- Go over all the following points, and put an `x` in all the boxes that apply. --> - [x] I have read the [MCP Documentation](https://modelcontextprotocol.io) - [x] My code follows the repository's style guidelines - [x] New and existing tests pass locally - [x] I have added appropriate error handling - [ ] I have added or updated documentation as needed ## Additional context <!-- Add any other context, implementation notes, or design decisions --> Close modelcontextprotocol#127
Please merge or do i have anything pending? |
Going to leave this in @aphansal123's hands, who opened the original issue. |
I sincerely apologize for the disruption. This PR was accidentally closed due to a git history rewrite mistake. The PR has been recreated as #247 with all the original content preserved. Please continue any discussions or reviews on the new PR: #247 Again, I apologize for the inconvenience this has caused. |
Motivation and Context
Previously, the /v0/health endpoint only indicated if the service was running, without verifying database connectivity. This could result in false positives where the service appears healthy even if the database is down.
With this change, the health endpoint now checks the actual database connection and reports a "db_error" status with a 503 response if the database is unavailable. This provides more accurate health monitoring for deployments and automated systems, enabling better reliability and faster detection of backend issues.
How Has This Been Tested?
The endpoint was tested using the provided test script (test_endpoints.sh) and by running the application with and without a reachable database to verify real-world behaviour.
Breaking Changes
No, users do not need to update their code or configurations. The health check endpoint remains at the same URL and accepts the same requests.
Types of changes
Checklist
Additional context
I have started my journey for the first time doing a contribution. Thanks to all for your support.