Skip to main content
Glama
jbeker

ChartHop Search MCP

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

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.

Related MCP server: contacts-mcp

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

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):

{
  "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.py

Available Tools

1 tool
search_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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. 1 tool updatev0.1.0
    • First observedsearch_people

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Local MCP server that exposes Apple Contacts data, enabling phone, email, and name lookups via a helper app.
    5
    7 npm
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    An MCP server exposing employee info retrieval and web search tools, designed to be consumed by a LangChain agent for decoupled tool execution.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    A sample employee database exposed as an MCP server, enabling AI agents to search employees and query organizational structure.
    -