ChartHop Search MCP
by jbeker
README.md
# ChartHop Search MCP
A small [MCP](https://modelcontextprotocol.io) server that searches the 1Password/AgileBits
employee directory (ChartHop). It mirrors the ChartHop piece of the Internal1P Alfred workflow:
under the hood it calls `GET {host}/alfred/charthop?q={query}` with a bearer token and returns the
matching people.
## Tool
### `search_people(query)`
Search the directory by name (or partial name). Returns a list of people, each with:
| Field | Meaning |
| ------------- | ------------------------------------ |
| `name` | Full name |
| `job_title` | Role / title |
| `profile_url` | Link to the person's ChartHop profile |
Returns an empty list when there are no matches.
## Configuration
Configuration is read from environment variables:
| Variable | Required | Default | Notes |
| ----------------- | -------- | ---------------------------- | --------------------------------------------------------- |
| `CHARTHOP_TOKEN` | yes | — | Your Internal1P bearer token (JWT). |
| `CHARTHOP_HOST` | no | `https://www.internal1p.com` | Override for staging (`https://www.internal1pdev.com`) or local dev. |
> Supply **your own** token. Do not reuse a token belonging to another person — it is tied to their
> account.
## Setup
```sh
uv sync
```
## Register with an MCP client
Add this to your client's MCP config (e.g. Claude Desktop `claude_desktop_config.json`, or via
`claude mcp add` for Claude Code):
```json
{
"mcpServers": {
"charthop": {
"command": "uv",
"args": [
"--directory", "/Users/jeremybeker/development/charthup_mcp",
"run", "charthop-mcp"
],
"env": {
"CHARTHOP_TOKEN": "<your-jwt>"
}
}
}
}
```
## Verify
Smoke-test the tool logic directly (no MCP client needed):
```sh
CHARTHOP_TOKEN=<your-jwt> uv run python -c \
"from charthop_mcp.server import search_people; import json; print(json.dumps(search_people('jeremy'), indent=2))"
```
Or inspect it interactively with the MCP Inspector:
```sh
uv run mcp dev src/charthop_mcp/server.py
```
TDQS
A4.7/5.0
Scored across 1 tool
Disambiguation5/5
With only one tool, there is no possibility of confusion or overlap. The tool's purpose is clearly defined as searching for people by name.
Naming Consistency5/5
The tool name 'search_people' follows the standard verb_noun convention, is descriptive, and is internally consistent, even though it is the only tool.
Tool Count5/5
The server is explicitly a search MCP, so a single tool dedicated to searching people is well-scoped and earns its place. The narrow purpose does not require additional tools.
Completeness5/5
The tool fully covers the stated purpose of searching the employee directory by name and returns relevant fields. No obvious gaps exist for this narrow domain.
Maintenance
ActivityMaintained
ResponsivenessSyncing