Unofficial Python client and stdio MCP server for Eight person search workflows.
Project description
eight-mcp-community
Unofficial Python client and stdio MCP server for Eight person-search workflows.
[!WARNING] This project is unofficial and not affiliated with Eight or Sansan. It uses private/internal web endpoints that can change without notice. Keep cookies, credentials, and raw contact data out of GitHub, logs, issues, prompts, and public reports.
Design
This package follows the same idea as note-mcp-community, but the core is Python:
- PyPI/project name:
eight-mcp-community - Python import package:
eight - CLI commands:
eight-mcp-communityandeight-mcp - MCP server: stdio, suitable for local/private agent use
The core client is reusable without an LLM:
from eight import EightClient
client = EightClient.from_default_config()
result = client.search_person("鈴木太郎 東京商事")
print(result.to_safe_dict())
The MCP server is a thin wrapper over the same EightClient.
Install / run
Local development:
uv sync --dev
uv run eight-mcp-community --help
uv run eight-mcp-community serve
Run directly without installing permanently:
uvx eight-mcp-community serve
If Eight returns Cloudflare-style 403 responses with valid cookies, use the optional curl_cffi transport. It impersonates Chrome for the normal CLI/MCP path and does not require Playwright:
uvx --from 'eight-mcp-community[cloudflare]' eight-mcp-community serve
If you install with python -m pip install --user eight-mcp-community, the command may be placed under ~/.local/bin, which is not always on PATH. Either add that directory to PATH, use the absolute path, or run the module form:
python -m eight serve
~/.local/bin/eight-mcp-community serve
MCP client configuration:
{
"mcpServers": {
"eight": {
"command": "uvx",
"args": ["eight-mcp-community", "serve"]
}
}
}
Codex MCP examples:
# PATH-based
codex mcp add eight -- eight-mcp-community serve
# pip --user / absolute-path style
codex mcp add eight -- /Users/you/.local/bin/eight-mcp-community serve
# Cloudflare-resistant transport via uvx
codex mcp add eight -- uvx --from 'eight-mcp-community[cloudflare]' eight-mcp-community serve
After package upgrades, optional dependency changes, authentication changes, or MCP configuration edits, restart Codex / your MCP client or otherwise restart the MCP server process. Already-running MCP servers keep using the old Python process.
Recommended post-install message for agents:
Eight MCP registration is installed. Authentication is intentionally simple:
1. Check current state: /Users/you/.local/bin/eight-mcp-community auth-status
2. If no cookie is configured, log in with Playwright: /Users/you/.local/bin/eight-mcp-community auth-login
3. If you already have a trusted Cookie header, save it directly: /Users/you/.local/bin/eight-mcp-community set-cookie '<COOKIE_HEADER>'
If a known-good cookie returns 403, use/install eight-mcp-community[cloudflare]. Restart Codex or the MCP client after package/auth/config changes.
Local development MCP config:
{
"mcpServers": {
"eight": {
"command": "uv",
"args": [
"--directory",
"/path/to/eight-mcp-community",
"run",
"eight-mcp-community",
"serve"
]
}
}
}
Authentication
The authentication surface is intentionally small:
auth-statuschecks whether a Cookie header is configured and whether it can currently access Eight.auth-loginuses Playwright for an interactive browser login, captures 8card.net cookies, and saves them.set-cookiesaves a trusted Cookie header supplied from outside the MCP flow.
Unless you provide a Cookie header via set-cookie or EIGHT_COOKIE, logging in requires Playwright:
python -m pip install --user 'eight-mcp-community[browser]'
python -m playwright install chromium
~/.local/bin/eight-mcp-community auth-login
If Playwright's browser binary is missing, install it once on the same machine/user account:
python -m playwright install chromium
Create or overwrite the config file from a trusted Cookie header:
~/.local/bin/eight-mcp-community set-cookie '<COOKIE_HEADER>'
~/.local/bin/eight-mcp-community auth-status
Supported credential lookup order:
EIGHT_COOKIE— externally supplied Cookie headerEIGHT_MCP_COMMUNITY_CONFIG— path to config JSON with acookiefield- Default config file:
~/.config/eight-mcp-community/config.json
If a known-good cookie returns HTTP 403, Eight/Cloudflare may be rejecting the plain HTTP transport. Use the [cloudflare] extra and restart the MCP client:
python -m pip install --user 'eight-mcp-community[cloudflare]'
CLI
eight-mcp-community auth-status
eight-mcp-community auth-login
eight-mcp-community set-cookie 'Cookie header'
eight-mcp-community search '鈴木'
eight-mcp-community search '鈴木' --always-network
eight-mcp-community serve
All command output is JSON except --help.
MCP tools
Authentication tools:
eight_auth_status— check whether auth is configured and whether the current Cookie can access Eighteight_auth_login— open a Playwright browser login flow, capture cookies, and save them througheight_set_cookieeight_set_cookie— store a trusted Cookie header in the local MCP config file
Search tools:
eight_search_person— search registered/exchanged cards first; search public Eight network only if no registered-card hit, unlessalwaysNetworkis trueeight_search_registered_cards— search only registered/exchanged business cardseight_search_network_people— search only public Eight network people, keeping public results separate from private cards
Returned data is intentionally minimal and LLM-safe: source, name, company, department, title, updated date, confidence/source bucket, and when available matched_fields / match_excerpt so users can understand why a result matched. Raw HTML, raw JSON, cookies, tokens, email addresses, phone numbers, and bulk exports are not returned.
Privacy and safety
- Do not use this project for bulk contact export or contact-list harvesting.
- Do not commit cookies, config files, raw API dumps, screenshots, or credentials.
- Treat registered business-card results as private context; cite public sources for public-facing reports.
- Eight business-card data can be stale. Corroborate current affiliation/title with public sources when accuracy matters.
Development
uv sync --dev
uv run ruff check .
uv run pytest
Manual MCP smoke test:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"smoke-test","version":"0.0.0"}}}' \
'{"jsonrpc":"2.0","method":"notifications/initialized","params":{}}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \
| timeout 5s uv run eight-mcp-community serve
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file eight_mcp_community-0.1.7.tar.gz.
File metadata
- Download URL: eight_mcp_community-0.1.7.tar.gz
- Upload date:
- Size: 80.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16b25507087c209337d669ed78b30ab907b477582ad6970aa3f58cd71428d8a1
|
|
| MD5 |
d832aad5dd93a48e0099649335c88152
|
|
| BLAKE2b-256 |
581e5c92b67f6c5fc43e453fefbd3b6134665b14e297e80e104b28f5a8c06cef
|
Provenance
The following attestation bundles were made for eight_mcp_community-0.1.7.tar.gz:
Publisher:
publish.yml on new-village/eight-mcp-community
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eight_mcp_community-0.1.7.tar.gz -
Subject digest:
16b25507087c209337d669ed78b30ab907b477582ad6970aa3f58cd71428d8a1 - Sigstore transparency entry: 2010706220
- Sigstore integration time:
-
Permalink:
new-village/eight-mcp-community@b268a3d13970bda58724ddf686523eddac8b0ac0 -
Branch / Tag:
refs/tags/v0.1.7 - Owner: https://github.com/new-village
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b268a3d13970bda58724ddf686523eddac8b0ac0 -
Trigger Event:
release
-
Statement type:
File details
Details for the file eight_mcp_community-0.1.7-py3-none-any.whl.
File metadata
- Download URL: eight_mcp_community-0.1.7-py3-none-any.whl
- Upload date:
- Size: 17.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36a10b7626c9ed3c3cdff6e17422965fdbfa04080408c3d4b91f9b198085499b
|
|
| MD5 |
1a05450ae50c83bc443987f2d8d4621a
|
|
| BLAKE2b-256 |
675f7121a09b560ab9781bd59b06f4a179582b9ea89d5609db17f78530130902
|
Provenance
The following attestation bundles were made for eight_mcp_community-0.1.7-py3-none-any.whl:
Publisher:
publish.yml on new-village/eight-mcp-community
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eight_mcp_community-0.1.7-py3-none-any.whl -
Subject digest:
36a10b7626c9ed3c3cdff6e17422965fdbfa04080408c3d4b91f9b198085499b - Sigstore transparency entry: 2010706273
- Sigstore integration time:
-
Permalink:
new-village/eight-mcp-community@b268a3d13970bda58724ddf686523eddac8b0ac0 -
Branch / Tag:
refs/tags/v0.1.7 - Owner: https://github.com/new-village
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@b268a3d13970bda58724ddf686523eddac8b0ac0 -
Trigger Event:
release
-
Statement type: