Skip to main content
Glama
kevinnz

humanitix-mcp

by kevinnz

humanitix-mcp

A read-only MCP (Model Context Protocol) server for the Humanitix Public API.

This repository contains the completed Phase 1-5 implementation: a uv project, an async read-only Humanitix HTTP client, Pydantic response models, deterministic trimmed formatting helpers, and a stdio MCP server that exposes nine read-only tools.

Setup

This project uses uv and requires Python 3.11+.

uv sync --extra dev

Create a Humanitix Public API key in Account → Advanced → Public API key, following the official Humanitix Public API documentation. Generating a replacement key invalidates the prior key. Copy .env.example to .env and add the key locally:

cp .env.example .env

At startup, the server loads the project-local .env. Explicitly set HUMANITIX_API_KEY and HUMANITIX_BASE_URL environment variables take precedence; HUMANITIX_BASE_URL otherwise defaults to https://api.humanitix.com. HUMANITIX_DOTENV_PATH is an advanced explicit dotenv-path override, primarily for test or custom setups. Never put an API key in MCP configuration, source control, logs, or issue comments.

Related MCP server: hit-mcp

Running the server

The server communicates over stdio and is the MCP transport expected by Claude Desktop and MCP Inspector:

uv run humanitix-mcp

With the MCP Inspector:

npx @modelcontextprotocol/inspector uv run humanitix-mcp

The server creates one HumanitixClient per stdio connection and closes it when the connection ends.

Claude Desktop configuration

Add this secret-free server entry to Claude Desktop's MCP configuration:

{
  "mcpServers": {
    "humanitix": {
      "command": "uv",
      "args": [
        "--directory",
        "/Users/kevin/Documents/GitHub/humanitix-mcp",
        "run",
        "humanitix-mcp"
      ]
    }
  }
}

The credential stays solely in the gitignored project-local .env, never in the Claude Desktop configuration. The server loads that file when started by the command above.

Claude Code CLI project configuration

This separate, project-scoped Claude Code CLI .mcp.json configuration uses a secret-free shell wrapper that, from Claude's project-root working directory, exports variables from the local .env and then executes uv run humanitix-mcp. It contains no machine-specific paths, so a clone works after creating its own .env; the key remains only in that untracked local environment file. Check the Claude Code configuration with:

claude mcp list

The Claude-mediated humanitix_sales_summary verification is not yet complete: the local Claude CLI returned OAuth 401 before it made an MCP call. Re-authenticate the local Claude CLI using its normal login flow, confirm claude mcp list again, then retry the sales-summary call. This is separate from Humanitix API-key authentication.

Project structure

  • src/humanitix_mcp/ — Python package.

    • server.py — MCP server entry point and tool handlers (Phase 4).

    • client.py — Async Humanitix API HTTP client with auth, retry, and pagination (Phase 2).

    • models.py — Pydantic response models (Phase 3).

    • formatting.py — Deterministic response trimming helpers with a raw-payload opt-in escape hatch (Phase 3).

  • tests/ — Test suite.

  • tests/fixtures/ — Redacted JSON fixtures for model and formatting tests.

Tool catalog

The server exposes nine read-only tools:

Tool

Purpose

humanitix_list_events

List events with optional future-only, since, and override_location filters.

humanitix_get_event

Fetch one event by event_id.

humanitix_list_event_dates

List dates/sessions for an event_id.

humanitix_list_orders

List orders for an event_id and event_date_id.

humanitix_get_order

Fetch one order by event_id and order_id.

humanitix_list_tickets

List tickets for an event_id and event_date_id, optionally filtered by status.

humanitix_get_ticket

Fetch one ticket by event_id and ticket_id.

humanitix_get_check_in_count

Get check-in totals for an event_id and event_date_id (BETA endpoint).

humanitix_sales_summary

Summarise tickets for an event_id and event_date_id.

Tag tools are intentionally not included: the live CHCon account returned no tags when queried with a read-only key on 15 August 2026.

All list tools support page_size (1-100) and max_items (default 500). All data-returning tools support raw=true to return the full Humanitix payload instead of the trimmed summary.

override_location is forwarded to Humanitix as overrideLocation. Use it when events are associated with a different market (for example, an NZ account); the default location filter can legitimately omit an event.

Verified public CHCon 2025 smoke target

The opt-in, read-only smoke test verified this public event identifier on 15 August 2026:

  • Event: 6875f6fd6e7ba808d7baa311

The direct API title expands the CHCon name as “Christchurch Hacker Con and Training Day 2025”; the smoke test accepts that expanded public name or a literal case-insensitive chcon name and derives date identifiers at runtime. It exercised every read-only tool, including raw structural identifier checks for order and ticket lists. The BETA check-in endpoint is unstable: it may return a structured 5xx service outcome even when the tool request is valid.

Troubleshooting

  • Humanitix 401: Confirm HUMANITIX_API_KEY is set in local .env, was obtained from the official key page above, and has not been replaced; then restart the MCP client. Do not share the key while investigating.

  • Missing events: Try the appropriate override_location; Humanitix applies location filtering through overrideLocation.

  • Cold starts: The first uv run or MCP request can take longer while the environment starts. Wait for the stdio client to connect and retry rather than treating a startup delay as an API failure.

  • Empty results: An empty event, order, ticket, or tag collection can be a valid account/data-availability result. The smoke account had zero tags, so no tag tools are exposed.

  • BETA check-in: Treat a structured 5xx result from humanitix_get_check_in_count as an unstable service outcome, not a reason to retry with altered identifiers.

  • Claude OAuth 401: This is authentication to the local Claude CLI, not the Humanitix API. Re-authenticate Claude, verify claude mcp list, and retry the tool call.

Read-only boundary

The server only implements read-only tools. No write endpoints, check-in/check-out actions, transfers, or network listeners are exposed.

Structured errors

Expected failures are returned as JSON dictionaries with success: false and a human-readable error message. This covers missing configuration, invalid arguments, authentication, authorization, not-found, validation, server, and transport failures. Error messages never include the API key or raw tracebacks.

Running tests

uv run pytest

Implementation status

  • Phase 1: Scaffold

  • Phase 2: HTTP client (client.py)

  • Phase 3: Response models and trimming (models.py, formatting.py)

  • Phase 4: MCP server and tools (server.py)

  • Phase 5: Live smoke test (15 August 2026)

  • Phase 6: Claude Cowork sales-summary verification (blocked on local Claude OAuth 401 before an MCP call)

  • Phase 7: Documentation

License

MIT

Available Tools

9 tools
humanitix_get_check_in_countA

Get check-in totals for a Humanitix event and event date. The event_id identifies the event; event_date_id identifies its specific date and can be obtained from humanitix_list_event_dates. Warning: the /check-in-count endpoint is BETA and its response shape may change. Returns trimmed counts by default; set raw=true for the full payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn the raw Humanitix payload instead of the trimmed summary.
event_idYesHumanitix event identifier for the check-in count.
event_date_idYesHumanitix event-date identifier.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it flags the endpoint as BETA with a potentially changing response shape, and discloses that output is trimmed by default with raw=true for the full payload. It omits auth/permission requirements, which keeps it short of a 5.

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?

Three dense sentences, front-loaded with the purpose, then the input provenance, then the stability and output-shape caveats. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, two-identifier tool with no annotations and no output schema, the description covers purpose, input sourcing, output shape options, and a stability warning. The one gap is not characterizing what the trimmed counts actually report, but nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds meaning beyond the schema by explaining where event_date_id comes from (humanitix_list_event_dates) and contrasting trimmed vs. raw output. It stops short of describing what the trimmed counts contain.

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?

States a specific verb and resource ('Get check-in totals for a Humanitix event and event date') and scopes it to two identifiers. It is clearly distinguishable from the sibling list/get tools, none of which report check-in totals.

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?

Gives clear context and, notably, routes the agent to humanitix_list_event_dates for obtaining event_date_id. It doesn't state exclusions (e.g., when to use sales_summary instead), but the retrieval condition for its required input is explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

humanitix_get_eventA

Fetch a single Humanitix event by its event identifier. Returns the trimmed event by default; set raw=true for the full payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn the raw Humanitix payload instead of the trimmed summary.
event_idYesHumanitix event identifier.
override_locationNoISO 3166-1 alpha-2 country code to override the account location.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the default return shape (trimmed event, raw=true for full payload), but says nothing about error behavior for an unknown event_id, authentication/account scoping, or rate limits.

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?

Two tight sentences with the lookup key and the default-vs-raw behavior front-loaded; nothing is wasted and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter read tool with full schema coverage and no output schema, the description is minimally adequate. It does not characterize what the trimmed payload omits versus raw, nor failure cases, leaving some gaps an agent would want.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so event_id, raw, and override_location are all already documented. The description's mention of raw=true mirrors the schema's own default:false and description, adding no syntax or format detail beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (fetch) and resource (a single Humanitix event) qualified by the lookup key (event identifier), which cleanly separates it from the list-style siblings. It stops short of explicitly naming humanitix_list_events as the alternative for multi-event retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent must infer that this tool is for resolving a known event_id to full details while list tools cover discovery. There is no explicit when-to-use/when-not guidance or reference to any sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

humanitix_get_orderA

Fetch a single order by its event identifier and order identifier. Returns a trimmed order by default; set raw=true for the full payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn the raw Humanitix payload instead of the trimmed summary.
event_idYesHumanitix event identifier that owns the order.
order_idYesHumanitix order identifier within the event.
override_locationNoISO 3166-1 alpha-2 country code to override the account location.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden. It usefully states the default return shape ('trimmed order by default') and the raw override, which is genuine behavioral context. It does not state read-only safety, auth requirements, error behavior for a missing order, or anything about the override_location side effect.

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?

Two tightly written sentences with zero waste; the core operation is front-loaded and the default/override behavior follows immediately.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-fetch tool with no output schema and no annotations, the description conveys the key variable in the response (trimmed vs raw full payload), which is exactly what an agent needs to choose the right call. It is only slightly short of complete, leaving auth and error handling unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters including raw, event_id, order_id, and override_location are already documented in the schema. The description restates the raw flag's trimmed-vs-full behavior but adds no format, constraint, or default detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Fetch') and resource ('a single order'), scoped by event and order identifiers. It implicitly distinguishes itself from the sibling humanitix_list_orders by emphasizing 'single', but never names an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'single order' versus the list sibling, but there is no explicit when-to-use/when-not guidance and no mention of prerequisites such as required permissions or when to prefer the list endpoint.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

humanitix_get_ticketA

Fetch a single ticket by its event identifier and ticket identifier. Returns a trimmed ticket by default; set raw=true for the full payload.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn the raw Humanitix payload instead of the trimmed summary.
event_idYesHumanitix event identifier that owns the ticket.
ticket_idYesHumanitix ticket identifier within the event.
override_locationNoISO 3166-1 alpha-2 country code to override the account location.

TDQS

A3.6/5.0
Behavior3/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 usefully discloses the dual return mode (trimmed summary by default vs raw full payload), which is real behavioral context, but says nothing about permissions, error behavior when ids are invalid, or safety profile.

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?

Two tight sentences: identification semantics first, return-mode behavior second. Zero filler and everything is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only single-record fetch with a fully documented schema, the description covers identification and the trimmed-vs-raw payload distinction, which is the main ambiguity. Without an output schema it could say a bit more about what the trimmed payload contains, but nothing essential for calling it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented in the schema, including the raw flag and override_location. The description only restates the raw=true behavior and adds no semantics beyond the schema, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Fetch') and resource ('a single ticket') qualified by the two required identifiers, which implicitly distinguishes it from the sibling humanitix_list_tickets. It never names or contrasts with a sibling explicitly, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied – you call it when you already have an event and ticket id. There are no stated exclusions, prerequisites, or alternatives (e.g. 'use list_tickets to discover ids first'), so the agent must infer the routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

humanitix_list_event_datesA

List the event dates (sessions) belonging to a Humanitix event. Event dates are required identifiers for orders, tickets, and check-in tools. Returns a projection of each date with its id, name, and start/end times.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn the raw event payload instead of the date projection.
event_idYesHumanitix event identifier.
override_locationNoISO 3166-1 alpha-2 country code to override the account location.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden. It discloses the return shape ('projection of each date with its id, name, and start/end times') and read-only framing via 'List', but says nothing about pagination, permissions, account-location scoping, or error behavior for an unknown event_id.

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?

Three short sentences, front-loaded with the action and object, with the dependency note and return summary following. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully specifies the returned projection so the agent knows what fields to expect. It is adequate for a simple three-parameter list tool, though it omits pagination and empty-result behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (including raw and override_location) are already documented in the schema. The description adds no syntax or constraint detail beyond implying the default projection, so baseline 3 applies.

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?

Specific verb (List) plus resource (event dates/sessions) scoped to a Humanitix event, and the parenthetical clarifies the domain term 'sessions'. An agent can distinguish this from humanitix_list_events and humanitix_get_event immediately.

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?

States why the tool matters: event dates are 'required identifiers for orders, tickets, and check-in tools,' which implicitly routes the agent here before calling order/ticket/check-in tools. It does not, however, explicitly say when to use this over humanitix_get_event or what to do if no dates exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

humanitix_list_eventsA

List Humanitix events accessible to the configured API key. Returns trimmed event summaries by default; set raw=true to receive the full Humanitix payload. Results are paginated and capped at max_items (default 500). Use in_future_only=true to retrieve only events whose end date is in the future, or provide an ISO 8601 datetime via since.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn the raw Humanitix payload instead of the trimmed summary.
sinceNoISO 8601 datetime; return results since this time.
max_itemsNoMaximum total events to return (>=1).
page_sizeNoNumber of events per page (1-100).
in_future_onlyNoOnly return events whose end date is in the future.
override_locationNoISO 3166-1 alpha-2 country code to override the account location.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does reasonably well: it discloses that results are trimmed by default, that raw=true returns the full payload, that results are paginated and capped at max_items (default 500), and that the tool is scoped to the configured API key. It omits rate limits, error behavior, and auth failure modes, so it is strong but not complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with purpose then defaults then filters, and each sentence carries information. There is mild redundancy with the schema descriptions (raw, since, max_items, in_future_only all restated), which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations exist, so the description must carry the return-shape burden, which it does by explaining trimmed summaries vs. raw payload and the pagination cap. Combined with 100% schema coverage, an agent has enough to invoke correctly; only error/edge behavior is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (raw, since, max_items, page_size, in_future_only, override_location) is already documented in the schema; the baseline is 3. The description restates raw, max_items, in_future_only, and since with no syntax or behavior beyond the schema, and never mentions page_size or override_location at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List Humanitix events') and scopes it to 'accessible to the configured API key', which distinguishes it from humanitix_get_event (singular fetch). It does not explicitly name or differentiate itself from siblings like humanitix_list_event_dates, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives conditional guidance for parameters ('Use in_future_only=true to retrieve only future events, or provide an ISO 8601 datetime via since'), which implies when each filter applies. However, it never says when to use this tool versus humanitix_get_event or humanitix_list_event_dates, nor any prerequisites beyond the implicit API key.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

humanitix_list_ordersA

List orders for a specific Humanitix event and event date. The event_id identifies the event; event_date_id identifies its specific date and can be obtained from humanitix_list_event_dates. Returns trimmed orders by default; set raw=true for full payloads.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn raw order payloads instead of trimmed summaries.
sinceNoISO 8601 datetime; return results since this time.
event_idYesHumanitix event identifier that owns the order.
max_itemsNoMaximum total orders to return (>=1).
page_sizeNoNumber of orders per page (1-100).
event_date_idYesHumanitix event-date identifier.
override_locationNoISO 3166-1 alpha-2 country code to override the account location.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full behavioral burden. It discloses a genuinely useful trait — trimmed orders by default vs full payloads with raw=true — but omits auth/permission requirements, rate limits, and pagination/truncation behavior (max_items defaults to 500), leaving meaningful behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with purpose and scope, with no filler. The middle clause ('The event_id identifies the event') is mildly redundant with the opening sentence but not harmful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter list tool with no annotations and no output schema, the description covers purpose, required-ID provenance, and the trimmed/raw return distinction, but never addresses pagination semantics, the 'since' filter, or the country-code override. Adequate but with clear gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, and the description adds value by explaining the relationship between the two required IDs and the origin of event_date_id. It also reinforces the raw toggle, though it adds nothing about since, max_items, page_size, or override_location.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List orders') with a precise scope ('for a specific Humanitix event and event date'), so the agent immediately knows what is returned. It does not, however, contrast itself with siblings like humanitix_get_order or humanitix_list_tickets, so differentiation from the rest of the family is left implicit.

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?

Provides a real prerequisite: event_date_id 'can be obtained from humanitix_list_event_dates', which tells the agent how to sequence calls. There is no explicit when-not-to-use guidance or conditional routing to alternatives such as humanitix_get_order for a single order.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

humanitix_list_ticketsA

List tickets for a specific Humanitix event and event date. The event_id identifies the event; event_date_id identifies its specific date and can be obtained from humanitix_list_event_dates. Optionally filter by ticket status. Returns trimmed tickets by default; set raw=true for full payloads.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn raw ticket payloads instead of trimmed summaries.
sinceNoISO 8601 datetime; return results since this time.
statusNoOptional status filter (e.g. 'complete' or 'cancelled').
event_idYesHumanitix event identifier that owns the tickets.
max_itemsNoMaximum total tickets to return (>=1).
page_sizeNoNumber of tickets per page (1-100).
event_date_idYesHumanitix event-date identifier.
override_locationNoISO 3166-1 alpha-2 country code to override the account location.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does disclose meaningful behavior: results are trimmed by default and raw=true returns full payloads. It does not mention read-only nature, auth requirements, or rate limits, which is a minor gap for a low-risk list operation.

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?

Four tight sentences, front-loaded with the operation and scope, then the ID sourcing, then the optional filter and the raw/trimmed tradeoff. Every sentence adds information and none is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 parameters, no output schema, and no annotations, the description covers the essentials: what is listed, how to obtain the required IDs, optional filtering, and the trimmed/raw return distinction. It could say more about pagination interaction (max_items vs page_size), but is adequate for calling the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds real value beyond it by explaining the event_id/event_date_id relationship, where event_date_id comes from, and the trimmed-vs-raw semantics of the raw flag. It leaves since, max_items, page_size, and override_location to the schema.

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?

States a specific verb and resource ('List tickets for a specific Humanitix event and event date') and narrows the scope to a single event/date pair, which cleanly separates it from sibling list/get tools like humanitix_list_orders or humanitix_get_ticket. An agent can identify the operation without consulting any schema.

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?

Gives clear context: event_id identifies the event, event_date_id identifies the date and is sourced from humanitix_list_event_dates, and status is an optional filter. It stops short of stating when to prefer this over humanitix_get_ticket or humanitix_list_orders, so no explicit exclusions are offered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

humanitix_sales_summaryA

Build a sales summary for a Humanitix event and event date by aggregating tickets. Reports sold/complete counts, cancelled counts, gross revenue (when price data is available), and capacity utilisation (when a trustworthy capacity value is present). The event_id identifies the event; event_date_id identifies its specific date and can be obtained from humanitix_list_event_dates.

ParametersJSON Schema
NameRequiredDescriptionDefault
rawNoReturn the raw aggregated numbers without trimming.
event_idYesHumanitix event identifier that owns the tickets.
max_itemsNoMaximum total tickets to scan (>=1).
event_date_idYesHumanitix event-date identifier.
override_locationNoISO 3166-1 alpha-2 country code to override the account location.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the behavioral burden. It usefully discloses conditional output behavior ('gross revenue (when price data is available)', 'capacity utilisation (when a trustworthy capacity value is present)'), which is genuine added value, but it never states that the operation is read-only, nor anything about rate limits, cost, or the shape/size of the result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with no filler, front-loading the core purpose before the output contents and the parameter dependency note. Nothing is padded, though the middle sentence bundles several caveats.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description does a reasonable job of summarizing the return contents and flagging conditional availability of revenue/capacity figures. The remaining gap is behavioral (read-only nature, execution limits) rather than structural, given the schema fully documents all five parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description restates the roles of event_id and event_date_id and adds where to obtain the latter, but says nothing about raw, max_items, or override_location beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Build a sales summary for a Humanitix event and event date by aggregating tickets') and enumerates what the summary contains. It is clearly distinguishable from retrieval siblings like humanitix_get_event or humanitix_list_tickets, though it never explicitly contrasts itself with them.

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?

Provides concrete routing help by naming the sibling tool that supplies the required event_date_id ('can be obtained from humanitix_list_event_dates'), and the required event_id/event_date_id pair establishes the usage context. It stops short of stating when NOT to use this tool or any exclusions.

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. 9 tool updatesv0.1.0
    • First observedhumanitix_get_check_in_count
    • First observedhumanitix_get_event
    • First observedhumanitix_get_order
    • First observedhumanitix_get_ticket
    • First observedhumanitix_list_event_dates
    • First observedhumanitix_list_events
    • First observedhumanitix_list_orders
    • First observedhumanitix_list_tickets
    • First observedhumanitix_sales_summary

TDQS

A3.9/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a clearly distinct resource and action (list vs get for events, orders, tickets), and the analytics tools (check-in count, sales summary) are unambiguous. There is no meaningful overlap between any pair of tools.

Naming Consistency4/5

Nearly all tools follow a consistent humanitix_verb_noun pattern (list_events, get_order, list_tickets). The only deviation is sales_summary, which is a noun phrase without a verb, but the shared prefix keeps the set predictable.

Tool Count5/5

Nine tools is well-scoped for an event/ticketing read API, with each tool earning its place across events, dates, orders, tickets, and analytics.

Completeness4/5

The surface covers the core read lifecycle: events, event dates, orders, tickets, check-in totals, and sales aggregation. Only minor gaps exist (e.g. no single event-date fetch), which agents can work around via the list tool.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Read-only MCP server for the Humaans HRIS API, providing tools to query people, reporting chains, compensation, time away, and more.
    33
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Read-only MCP server for the HIT ticket management system that lists queues, searches/fetches ticket details, and lists ticket templates.
    4
    10 npm
    1
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    An MCP server that wraps the TryBooking Reporting API, enabling AI assistants like Claude to query bookings, events, sales reports, and attendance scans.
    15
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Full MCP server for the Eventbrite API with 73 tools to manage events, attendees, orders, tickets, venues, discounts, reports, webhooks, and more.
    -