Skip to main content
Glama
kenda-co

kenda-ingestion-mcp

Official
by kenda-co

ingestion-mcp

A small, read-only Model Context Protocol server that lets an AI host (e.g. Claude Code) answer questions about your Kenda token spend and waste straight from the terminal — "how much did I spend this week?", "which agent is wasting the most?".

It is a query surface only: it never captures or writes usage. It reads the token-authed /collector/* endpoints of the Kenda API using the endpoint + token from ~/.kenda/config.json (the same ingest token the Kenda collector writes), which resolve the token to its org server-side — so the terminal needs no browser/Auth0 session.

Tools

Tool

Endpoint

Returns

kenda_spend_summary

GET /collector/summary

Top-line spend, waste, and health for your org

kenda_waste_by_agent

GET /collector/agents

Per-agent spend and redundant (wasted) dollars

Related MCP server: agentburn

Install

uv tool install ingestion-mcp     # or: pipx install ingestion-mcp

The console script kenda-mcp runs the stdio server. uvx ingestion-mcp runs it without installing anything.

uv and pipx are recommended over a bare pip install because this ships a command-line entry point, and pip refuses to install into a Homebrew or distro-managed interpreter at all (error: externally-managed-environment, PEP 668). If you only have pip, use pip install --user ingestion-mcp. Both uv and pipx install into ~/.local/bin, which is not on PATH by default on macOS — if kenda-mcp is not found afterwards, that is why.

Configure

The server reads ~/.kenda/config.json:

{
  "endpoint": "https://api.kenda.app",
  "token": "kenda_your-ingest-token"
}

Only endpoint and token are required for queries. Both are written for you by kenda-collect init (the Kenda collector) or the Claude Code plugin's /kenda-setup. Environment variables override the file (KENDA_ENDPOINT, KENDA_TOKEN) for CI and power users.

Use with your AI host

The server is plain stdio MCP: every host below runs the same one-line command, kenda-mcp — only the config file differs. After registering, ask your assistant: "what did I spend this week?" or "which agent is wasting the most?".

Claude Code

.mcp.json in the project (or claude mcp add kenda -- kenda-mcp):

{
  "mcpServers": {
    "kenda": { "command": "kenda-mcp" }
  }
}

Cursor

~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):

{
  "mcpServers": {
    "kenda": { "command": "kenda-mcp" }
  }
}

Windsurf

~/.codeium/windsurf/mcp_config.json (docs):

{
  "mcpServers": {
    "kenda": { "command": "kenda-mcp" }
  }
}

VS Code (Copilot agent mode)

.vscode/mcp.json for one workspace — or run MCP: Open User Configuration from the command palette to register it for all workspaces. Note the key is servers here, not mcpServers:

{
  "servers": {
    "kenda": { "type": "stdio", "command": "kenda-mcp" }
  }
}

Codex CLI

~/.codex/config.toml (or codex mcp add kenda -- kenda-mcp):

[mcp_servers.kenda]
command = "kenda-mcp"

Gemini CLI

~/.gemini/settings.json (or .gemini/settings.json in a project):

{
  "mcpServers": {
    "kenda": { "command": "kenda-mcp" }
  }
}

Troubleshooting

If your host reports the server as failed, run the built-in self-test — it works even when the mcp package is broken, and tells you whether the problem is your config, the network, or the host:

kenda-mcp --check

It prints the version, the config it resolved (token masked), and the result of one live API call; exit code 0 means the server side is healthy, so the problem is host config.

Develop

python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
ruff check .
pytest

The HTTP query layer is pure stdlib and unit-tested (tests/test_query.py); the MCP transport is driven end-to-end with an in-memory client (tests/test_server.py), including a schema-regression test that pins host-safe tool shapes; the --check doctor mode is covered by tests/test_check.py. The mcp package is a runtime dependency, so all suites run in CI.

License

MIT — see LICENSE.

Available Tools

2 tools
kenda_spend_summaryA
Read-only

Top-line Kenda spend, waste, and health for your org.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and openWorldHint, so the description adds minimal new behavioral info. The term 'Top-line' suggests aggregated data, but no further details on data freshness, scope, or limits are provided.

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 single, front-loaded sentence that efficiently conveys the key information without any extraneous words.

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?

Given the tool has no parameters and an output schema exists, the description adequately explains the high-level output. It could mention that it covers the entire org, but the current text is sufficient for a simple tool.

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?

There are no parameters, so the baseline is 4. The description does not need to add parameter details, and the empty schema indicates no input is required.

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 returns top-line Kenda spend, waste, and health for the user's organization. It distinguishes itself from the sibling tool 'kenda_waste_by_agent' which focuses on waste by agent, indicating a broader aggregate view.

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 implies this is for high-level overview, but does not explicitly state when to use this tool versus alternatives like kenda_waste_by_agent. No usage conditions or prerequisites are mentioned.

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

kenda_waste_by_agentA
Read-only

Per-agent spend and redundant (wasted) dollars.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds that the tool is per-agent and focuses on wasted dollars, which provides some behavioral context beyond the annotations.

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?

Single sentence, perfectly concise, front-loaded with key information. No unnecessary words.

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?

Given no parameters and an existing output schema, the description is minimal but sufficient. It could benefit from clarifying what 'redundant dollars' means, but overall it is adequate.

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?

No parameters exist, so baseline is 4. The description does not need to add parameter details.

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 that the tool returns per-agent spend and redundant (wasted) dollars, distinguishing it from the sibling tool kenda_spend_summary which likely provides overall spend.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus the sibling kenda_spend_summary. The description implies it is for per-agent waste analysis, but lacks direct comparison or conditions.

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. Dates show when Glama detected each change.

  1. 2 tool updatesv0.1.1
    • Changedkenda_spend_summary1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "kenda_spend_summaryDictOutput",
        +  "type": "object"
        +}
    • Changedkenda_waste_by_agent1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "title": "kenda_waste_by_agentDictOutput",
        +  "type": "object"
        +}
  2. 2 tool updatesv0.1.0
    • First observedkenda_spend_summary
    • First observedkenda_waste_by_agent

TDQS

A3.9/5.0
Disambiguation5/5

The two tools have clearly distinct purposes: one provides an org-wide summary of spend/waste/health, the other breaks down waste per agent. No overlap or ambiguity.

Naming Consistency4/5

Both tool names use the 'kenda_' prefix and are descriptive (spend_summary, waste_by_agent). While not a strict verb_noun pattern, the naming is consistent in style and clearly conveys the tool's function.

Tool Count4/5

With only 2 tools, the server is minimal but appropriately scoped for a focused domain of Kenda spend/waste. The count is slightly low but reasonable for a targeted set.

Completeness3/5

The server covers top-level summary and per-agent waste, but lacks other potentially useful operations like time trends, department breakdowns, or cost allocation. Notable gaps exist for a more complete spend analysis surface.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/kenda-co/ingestion-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server