ChartHop Search MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ChartHop Search MCPsearch for Jeremy Beker's contact info"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ChartHop Search MCP
A small MCP 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 |
| Full name |
| Role / title |
| Link to the person's ChartHop profile |
Returns an empty list when there are no matches.
Related MCP server: contacts-mcp
Configuration
Configuration is read from environment variables:
Variable | Required | Default | Notes |
| yes | — | Your Internal1P bearer token (JWT). |
| no |
| Override for staging ( |
Supply your own token. Do not reuse a token belonging to another person — it is tied to their account.
Setup
uv syncRegister 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):
{
"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):
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:
uv run mcp dev src/charthop_mcp/server.pyAvailable Tools
1 toolsearch_peopleA
Search the 1Password/AgileBits employee directory (ChartHop) by name.
Args: query: A name (or partial name) to look up.
Returns:
A list of matching people, each with name, job_title, and
profile_url (a link to their ChartHop profile). Empty if no matches.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return format (list with name, job_title, profile_url) and the empty-list behavior for no matches. Though it doesn't explicitly state auth requirements or side effects, the verb 'search' implies a read-only operation, and the return details are helpful. A score of 4 reflects this good but not exhaustive disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a well-organized docstring with separate Args and Returns sections. It is concise, front-loaded with the primary purpose, and every sentence adds value—no filler or repetition. The structure makes it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no nested objects), the description is fully complete. It covers the input semantics, output structure, and edge-case behavior. The presence of an output schema for return values is indirectly supported by the explicit return description, so nothing important is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for the single 'query' parameter, but the description fully compensates by explaining that it should be a name or partial name. This adds meaning beyond the raw string type in the schema, so the description carries the semantic weight effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search the 1Password/AgileBits employee directory (ChartHop) by name.' It uses a specific verb ('search'), identifies the resource ('employee directory'), and specifies the filter ('by name'). This distinguishes it from any potential sibling tools, though none are listed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on how to use the tool: pass a name or partial name as the query. It does not explicitly mention alternative tools or when-not-to-use, but no siblings exist. The guidance 'A name (or partial name) to look up' is direct and sufficient for most use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.1.0- First observed
search_people
TDQS
Scored across 1 tool
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.
The tool name 'search_people' follows the standard verb_noun convention, is descriptive, and is internally consistent, even though it is the only tool.
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.
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
Related MCP Connectors
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
Public MCP server for discovering open jobs. Search, filter, and get application links.
The official Planning Center MCP server for interacting with your ministry's data.
MCP server for the HubSpot Integrations Center HubDB: search and retrieve integration data.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server for searching and retrieving content from Igloo digital workplace instances. Enables AI assistants to search, fetch pages as Markdown, and look up member profiles via the Igloo API.4MIT
- AlicenseAqualityDmaintenanceLocal MCP server that exposes Apple Contacts data, enabling phone, email, and name lookups via a helper app.57 npmMIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server exposing employee info retrieval and web search tools, designed to be consumed by a LangChain agent for decoupled tool execution.-
- FlicenseNot gradedqualityCmaintenanceA sample employee database exposed as an MCP server, enabling AI agents to search employees and query organizational structure.-