haive.mcp.discovery

Server discovery module for finding MCP servers from various sources.

This module provides functionality to discover MCP servers from multiple registries and sources including npm, PyPI, GitHub, and custom registries.

Examples

Basic discovery:


discovery = ServerDiscovery(config) servers = await discovery.discover_all(limit_per_source=10)

Discover from specific source:

servers = await discovery.discover_from_npm(query="mcp server", limit=20)
Classes:

ServerDiscovery: Main discovery class DiscoveredServer: Information about a discovered server

Version: 1.0.0 Author: Haive MCP Team

class discovery.DiscoveredServer(*, name, source, source_url=None, description=None, package_name=None, repo_url=None, author=None, version=None, stars=None, tags=<factory>, metadata=<factory>)[source]

Information about a discovered MCP server.

Parameters:
  • name (str)

  • source (str)

  • source_url (str | None)

  • description (str | None)

  • package_name (str | None)

  • repo_url (str | None)

  • author (str | None)

  • version (str | None)

  • stars (int | None)

  • tags (set[str])

  • metadata (dict[str, Any])

name

Server name

Type:

str

source

Where it was discovered (npm, github, etc.)

Type:

str

source_url

URL where it was found

Type:

str | None

description

Server description

Type:

str | None

package_name

Package name (for npm/pypi)

Type:

str | None

repo_url

Repository URL (for git)

Type:

str | None

author

Author/owner name

Type:

str | None

version

Latest version

Type:

str | None

stars

GitHub stars or similar metric

Type:

int | None

tags

Extracted tags

Type:

set[str]

metadata

Additional metadata

Type:

dict[str, Any]

Examples

Discovered server info:

author: str | None
description: str | None
metadata: dict[str, Any]
model_config: ClassVar[ConfigDict] = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

name: str
package_name: str | None
repo_url: str | None
source: str
source_url: str | None
stars: int | None
tags: set[str]
version: str | None
class discovery.ServerDiscovery(config)[source]

Discovers MCP servers from various sources.

This class provides methods to discover MCP servers from multiple registries and sources, with support for various search patterns and filtering options.

Parameters:

config (DiscoveryConfig)

config

Discovery configuration

discovered_cache

Cache of discovered servers

session

Aiohttp session for HTTP requests

Examples

Using discovery:

async __aenter__()[source]

Async context manager entry.

async __aexit__(exc_type, exc_val, exc_tb)[source]

Async context manager exit.

__init__(config)[source]

Initialize server discovery.

Parameters:

config (DiscoveryConfig) – Discovery configuration with sources and patterns

determine_template(server_data)[source]

Determine the appropriate template for a discovered server.

Parameters:

server_data (dict[str, Any]) – Discovered server information

Returns:

Template name to use

Return type:

str

Examples

Determining template:

async discover_all(limit_per_source=None)[source]

Discover servers from all configured sources.

Parameters:

limit_per_source (int | None) – Maximum servers to discover per source. Uses config default if not specified.

Returns:

List of discovered server dictionaries

Return type:

list[dict[str, Any]]

Examples

Discovering from all sources:

async discover_from_github(api_url, limit=100)[source]

Discover servers from GitHub.

Parameters:
  • api_url (str) – GitHub API search URL

  • limit (int) – Maximum results

Returns:

List of discovered servers

Return type:

list[dict[str, Any]]

Examples

GitHub discovery:

async discover_from_npm_registry(registry_url, limit=100)[source]

Discover servers from npm registry.

Parameters:
  • registry_url (str) – NPM registry search URL

  • limit (int) – Maximum results to return

Returns:

List of discovered servers

Return type:

list[dict[str, Any]]

Examples

NPM discovery:

async discover_from_pypi(search_url, limit=100)[source]

Discover servers from PyPI.

Parameters:
  • search_url (str) – PyPI search URL

  • limit (int) – Maximum results

Returns:

List of discovered servers

Return type:

list[dict[str, Any]]

async discover_from_url(url, limit=100)[source]

Discover servers from a generic URL (e.g., README).

Parameters:
  • url (str) – URL to parse for server information

  • limit (int) – Maximum results

Returns:

List of discovered servers

Return type:

list[dict[str, Any]]

async search_servers(query, sources=None, limit=50)[source]

Search for servers across sources with a specific query.

Parameters:
  • query (str) – Search query

  • sources (list[str] | None) – Specific sources to search (npm, pypi, github)

  • limit (int) – Maximum results

Returns:

List of matching servers

Return type:

list[dict[str, Any]]

Examples

Searching for servers: