Skip to main content

infobel-api-mcp

Python client and MCP server for the Infobel GetData API.


Installation

From PyPI:

pip install infobel-api-mcp

For local development:

pip install -e .

Requires Python 3.10+.


Quick start — configure your agent

After installing, run one command to wire infobel-mcp into your agent host:

# User-global config (prompts for credentials)
infobel-mcp add claude       # writes ~/.claude.json
infobel-mcp add codex        # writes ~/.codex/config.toml
infobel-mcp add gemini       # writes ~/.gemini/settings.json (uses env var placeholders)

# Project-local config (cwd)
infobel-mcp add claude --local
infobel-mcp add codex  --local
infobel-mcp add gemini --local

# Project-local config at a specific path
infobel-mcp add claude --local /path/to/project

# Skip the interactive prompts
infobel-mcp add claude --username myuser --password mypass

# Write ${INFOBEL_USERNAME}/${INFOBEL_PASSWORD} placeholders instead of literal creds
infobel-mcp add claude --use-env-vars

After running the command, set your credentials as environment variables:

export INFOBEL_USERNAME="your-username"
export INFOBEL_PASSWORD="your-password"

Configuration

Set your credentials as environment variables:

export INFOBEL_USERNAME="your-username"
export INFOBEL_PASSWORD="your-password"

Or pass them directly when creating a client:

from infobel_api import InfobelClient

client = InfobelClient(username="your-username", password="your-password")

Python client

Basic search

from infobel_api import InfobelClient

with InfobelClient() as client:
    result = client.search.search(country_codes="GB", business_name="Acme")

    print(result["counts"]["total"])       # total matching businesses
    print(result["firstPageRecords"])      # [] by default

return_first_page defaults to False, so search() returns counts and a searchId without embedding records unless you explicitly opt in.

Get specific fields (recommended for large result sets)

with InfobelClient() as client:
    # Start a search
    result = client.search.search(
        country_codes="US",
        business_name="Tesla",
    )
    search_id = result["searchId"]

    # Fetch page 1 with only the fields you need
    page = client.search.post_records(
        search_id,
        page=1,
        fields=["uniqueID", "businessName", "phone", "email", "city"],
    )
    for record in page["records"]:
        print(record)

    # Fetch page 2
    page2 = client.search.post_records(search_id, page=2, fields=["uniqueID", "businessName"])

Fetch a full record by unique ID

with InfobelClient() as client:
    record = client.record.get(country_code="US", unique_id="0226550061")
    print(record["businessName"], record["phone"])

Other filters

with InfobelClient() as client:
    # By national ID
    result = client.search.search(country_codes="BE", national_id="0123456789")

    # Businesses with email in a city
    result = client.search.search(
        country_codes="FR",
        city_names="Paris",
        has_email=True,
    )

    # Filter by employee count
    result = client.search.search(
        country_codes="DE",
        employees_total_from=50,
        employees_total_to=200,
    )

MCP server

The package ships an MCP server that exposes the Infobel API as tools for AI agents (Claude, etc.).

Quick install for Claude Code

After installing the package, register the MCP server with:

infobel-mcp add claude

This automatically uses the Python executable that has the package installed, regardless of whether you are in a venv, conda environment, or using the system Python.

Configure Claude Code manually

As of March 18, 2026, Claude Code stores MCP servers in:

  • User scope: ~/.claude.json
  • Project scope: /path/to/project/.mcp.json

On Windows, ~/.claude.json maps to your home directory, typically %USERPROFILE%\\.claude.json.

Add this to either file:

{
  "mcpServers": {
    "infobel": {
      "type": "stdio",
      "command": "/path/to/your/python",
      "args": ["-m", "infobel_api.mcp_server"],
      "env": {
        "INFOBEL_USERNAME": "your-username",
        "INFOBEL_PASSWORD": "your-password"
      }
    }
  }
}

Replace /path/to/your/python with the Python executable that has infobel-api-mcp installed. To find it, run this inside the environment where the package is installed:

python -c "import sys; print(sys.executable)"

For a venv the path typically looks like /path/to/project/venv/bin/python. For conda it looks like /opt/conda/envs/myenv/bin/python. The infobel-mcp add claude command above handles this automatically.

Configure Gemini CLI manually

Gemini CLI stores MCP servers in:

  • User scope: ~/.gemini/settings.json
  • Project scope: /path/to/project/.gemini/settings.json

On Windows, ~/.gemini/settings.json maps to your home directory, typically %USERPROFILE%\\.gemini\\settings.json.

Add this to the settings.json file:

{
  "mcpServers": {
    "infobel": {
      "command": "/path/to/your/python",
      "args": ["-m", "infobel_api.mcp_server"],
      "env": {
        "INFOBEL_USERNAME": "${INFOBEL_USERNAME}",
        "INFOBEL_PASSWORD": "${INFOBEL_PASSWORD}"
      }
    }
  }
}

Replace /path/to/your/python with the Python executable that has infobel-api-mcp installed (see the note in the Claude Code section above). If your settings.json already contains other top-level keys, merge the mcpServers block into the existing file instead of replacing it.

Configure Codex manually

Codex stores MCP servers in:

  • User scope: ~/.codex/config.toml
  • Project scope: /path/to/project/.codex/config.toml

On Windows, ~/.codex/config.toml maps to your home directory, typically %USERPROFILE%\\.codex\\config.toml.

Add this to config.toml:

[mcp_servers.infobel]
command = "/path/to/your/python"
args = ["-m", "infobel_api.mcp_server"]

[mcp_servers.infobel.env]
INFOBEL_USERNAME = "your-username"
INFOBEL_PASSWORD = "your-password"

Replace /path/to/your/python with the Python executable that has infobel-api-mcp installed (see the note in the Claude Code section above). Codex CLI and the Codex IDE extension share the same MCP configuration.

Claude Desktop (one-click extension)

Claude Desktop is a separate app from Claude Code and uses a different config. The easiest path for end users is the bundled Desktop Extension (.mcpb): no Python install, no manual JSON, no PATH setup. The user double-clicks the bundle, Claude Desktop prompts for the Infobel username and password, and the tools appear.

Install (for users):

  1. Download infobel-getdata.mcpb from the releases page.
  2. Double-click it (or in Claude Desktop: Settings → Extensions → Install Extension…).
  3. Enter your Infobel username and password in the dialog. The password is stored securely in the OS keychain.
  4. Fully quit and reopen Claude Desktop. The Infobel tools are now available.

The bundle uses the MCPB uv server type — Claude Desktop runs uv to resolve dependencies cross-platform at install time, so users do not need their own Python.

Build the bundle (for maintainers):

./build_mcpb.sh          # → dist/infobel-getdata.mcpb

Requires Node.js (the script invokes npx @anthropic-ai/mcpb). The manifest lives in mcpb/manifest.json; bump its version on each release. Attach the resulting .mcpb to a GitHub Release.

Configure Claude Desktop manually (alternative to the extension): edit the config file directly —

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\\Claude\\claude_desktop_config.json
{
  "mcpServers": {
    "infobel": {
      "command": "/path/to/your/python",
      "args": ["-m", "infobel_api.mcp_server"],
      "env": {
        "INFOBEL_USERNAME": "your-username",
        "INFOBEL_PASSWORD": "your-password"
      }
    }
  }
}

Claude Desktop does not inherit your shell environment or expand ${VAR} placeholders, so the command must be an absolute Python path and credentials must be literal values. Fully restart the app after editing.

Available tools

Tool Description
search_businesses Search by name, location, category, and more
get_search_results Fetch additional pages from a previous search
get_record Get a full business record by unique ID
get_record_partial Get a lightweight record by unique ID
get_categories_infobel Browse Infobel category tree
get_categories_international Browse ISIC categories
get_categories_local Browse local/national categories
get_locations_cities List cities for a country
get_locations_regions List regions for a country
get_locations_provinces List provinces for a country
get_available_countries List all available countries
get_languages List available display languages
test_connection Verify API connectivity

Example MCP interaction

Once configured, you can ask Claude things like:

"Find all Italian restaurants in Brussels with a phone number."

Claude will call search_businesses with the right filters and return structured results. You tell it which fields you care about:

"Search for Google offices in the US — I only need the business name, address, and phone number."

The record_fields parameter controls what comes back (pass [] for counts only):

search_businesses(
  country_codes=["US"],
  business_name=["Google"],
  record_fields=["businessName", "address1", "city", "phone"]
)

To get more pages, use the searchId from the first call:

get_search_results(
  search_id=12345,
  page=2,
  record_fields=["businessName", "address1", "city", "phone"]
)

Error handling

from infobel_api import InfobelAPIError, AuthenticationError, RateLimitError, NetworkError

try:
    result = client.search.search(country_codes="GB", business_name="Acme")
except AuthenticationError:
    print("Invalid credentials")
except RateLimitError:
    print("Rate limited — retries are automatic")
except NetworkError:
    print("Connection issue")
except InfobelAPIError as e:
    print(f"API error {e.status_code}: {e.message}")

The client handles rate limiting and retries automatically.


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

infobel_api_mcp-1.1.2.tar.gz (74.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

infobel_api_mcp-1.1.2-py3-none-any.whl (42.3 kB view details)

Uploaded Python 3

File details

Details for the file infobel_api_mcp-1.1.2.tar.gz.

File metadata

  • Download URL: infobel_api_mcp-1.1.2.tar.gz
  • Upload date:
  • Size: 74.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for infobel_api_mcp-1.1.2.tar.gz
Algorithm Hash digest
SHA256 8d83c422d7a91ea25ae13a32179abd4b802675fdfd3f8478c72a1c7e71ec1003
MD5 d71208fb46418d44a2bff49d907eacc4
BLAKE2b-256 b07ecbcdde76715359ad0a7dfae1b07a7441db4d024ca4d565e743c8ee4c2779

See more details on using hashes here.

File details

Details for the file infobel_api_mcp-1.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for infobel_api_mcp-1.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 17d493bf46a8d8d406b080e5248d50a56355495e484f537aeafefabedfd6c3d1
MD5 889235739c0a8b40b65ba584abbebe06
BLAKE2b-256 135f2221946502feaef787a1ad4591f9f00828f69dad120cd80a3b5b50965c37

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.1.2 This release

2 files

1.1.1

2 files

1.1.0

2 files

1.0.6

2 files

1.0.5

2 files

1.0.4

2 files

1.0.3

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page