Skip to main content
Glama

Gauge

Made by Seaynic Labs. Need tools like this built around your own systems? We do that.

Gauge lets an AI assistant read your website's Umami analytics and send email through Resend, and comes with skills that teach it to do that work well: weekly reports, copy, SEO and email.

It is a bundle: tools, skills and instructions in one install. The tools are one server made of modules. You switch on the modules you use. New modules arrive switched off, so an update never changes what your assistant can do until you choose to.

Security card

Network

Only the services you configure: your Umami address (or api.umami.is) and api.resend.com. Nothing else, no telemetry.

Files

Reads its config file (/.config/gauge/config.toml). Writes one local approval log (/.local/state/gauge/approvals.jsonl).

Secrets

API keys and passwords come from your environment or config file. They are never tool arguments and never returned to the model.

Read-only tools

7: umami_websites, umami_stats, umami_pageviews, umami_metrics, resend_emails, resend_domains, gauge_modules

Needs your approval

resend_send: you approve each send in your app, or pre-approve recipients in settings. The AI cannot approve for you.

Startup cost

about 4,700 tokens (8 tools, 9 skill prompts)

Changes

Tool descriptions are locked by hash (tool-manifest.lock.json); CI fails if they change silently.

Module

What it does

Status

umami

Web analytics from Umami, self-hosted or Umami Cloud: sites, totals, time series, top pages, referrers, countries, browsers

0.1

resend

Email through Resend: send (preview first), list sent mail, list sending domains

0.1

Gauge works with any MCP client: Claude Desktop, Claude Code, Cursor, VS Code, Sonique, Hermes, OpenClaw and others. It runs on your computer and stores nothing; your data stays in Umami and Resend.

Skills

Skills are short guides your assistant reads before doing a job. Gauge ships 9, in two forms from one source: a skills/ folder for apps that read Agent Skills (Claude Code and others), and MCP prompts for every other MCP app.

Skill

What it covers

By

getting-started

Setup, first checks, fixing errors

Seaynic Labs

weekly-site-report

A one-minute weekly traffic report from Umami

Seaynic Labs

analytics, seo-audit, copywriting, emails

Tracking plans, SEO audits, page copy, email sequences

Corey Haines, MIT

resend, email-best-practices, react-email

Sending with Resend, deliverability, HTML email

Resend, MIT

Third-party skills keep their licenses; see CREDITS.md.

Related MCP server: Gizmo Analytics

Install

Gauge needs Python 3.11 or newer. With uv you don't install anything ahead of time:

uvx gauge-mcp --version
uvx gauge-mcp --doctor          # checks your settings and connections, prints fixes

Pin the exact version if you want updates only when you choose them: uvx gauge-mcp==0.2.1.

Or with pip:

pip install gauge-mcp

As a Claude Code plugin (tools and skills in one step):

/plugin marketplace add seayniclabs/plugins
/plugin install gauge@seayniclabs

Plugin users put settings in ~/.config/gauge/config.toml (below).

Settings

Set these as environment variables in your MCP client's config, or put them in a config file (see below). You only need the settings for the modules you use. Gauge starts without any of them and tells you what's missing when you call a tool.

Variable

Module

What it is

GAUGE_UMAMI_URL

umami

Your Umami address, e.g. https://analytics.example.com

GAUGE_UMAMI_USERNAME / GAUGE_UMAMI_PASSWORD

umami

A self-hosted Umami login. A view-only user is enough.

GAUGE_UMAMI_API_KEY

umami

Umami Cloud API key (instead of a login). GAUGE_UMAMI_URL defaults to Umami Cloud when this is set.

GAUGE_RESEND_API_KEY

resend

Resend API key

GAUGE_RESEND_FROM

resend

Sender address on a domain you verified in Resend

GAUGE_RESEND_FROM_NAME

resend

Optional sender display name

GAUGE_RESEND_ALLOWED_RECIPIENTS

resend

Optional. Comma-separated addresses or @domains the assistant may send to without asking you each time, e.g. me@example.com,@example.com

GAUGE_RESEND_REQUIRE_CONFIRM

resend

true by default: you approve each send. false lets the assistant send on its own.

GAUGE_<MODULE>_ENABLED

any

false turns a module off, e.g. GAUGE_RESEND_ENABLED=false

Config file (optional). Gauge also reads ~/.config/gauge/config.toml, or the file named by GAUGE_CONFIG. Environment variables win over the file.

[umami]
url = "https://analytics.example.com"
username = "viewer"
password = "change-me"

[resend]
enabled = false

Add it to your MCP client

Most clients use the same JSON shape. Put it where your client keeps MCP servers:

{
  "mcpServers": {
    "gauge": {
      "command": "uvx",
      "args": ["gauge-mcp"],
      "env": {
        "GAUGE_UMAMI_URL": "https://analytics.example.com",
        "GAUGE_UMAMI_USERNAME": "viewer",
        "GAUGE_UMAMI_PASSWORD": "change-me",
        "GAUGE_RESEND_API_KEY": "re_your_key",
        "GAUGE_RESEND_FROM": "hello@example.com"
      }
    }
  }
}

Client

Where the config goes

Claude Desktop

claude_desktop_config.json (Settings → Developer → Edit Config)

Claude Code

claude mcp add gauge -- uvx gauge-mcp, then add the env values, or a project .mcp.json

Cursor

~/.cursor/mcp.json, or .cursor/mcp.json in a project

VS Code

.vscode/mcp.json, using "servers" instead of "mcpServers"

Sonique, Hermes, OpenClaw, others

Any client that launches a stdio MCP server: command uvx, args ["gauge-mcp"], plus the env values

Over HTTP. For clients that connect to a URL instead of launching a process:

gauge-mcp --transport http --port 8765

It serves streamable HTTP at http://127.0.0.1:8765/mcp. It listens only on your own machine by default. Put authentication in front of it before exposing it anywhere else.

Try these

Paste one into your assistant once Gauge is set up:

  1. "How did my site do last week compared with the week before?"

  2. "Which pages got the most visits this month, and where did those visitors come from?"

  3. "Write my weekly site report and draft it as an email to me. Don't send it yet."

  4. "Audit the SEO of my top three pages and suggest new titles and descriptions."

  5. "Which of my Resend sending domains aren't verified yet, and what do I need to fix?"

Tools

Tool

What it returns

gauge_modules

Which modules are on, which settings are missing, and what each tool does. Call this first.

umami_websites

Tracked websites, paged

umami_stats

Pageviews, visitors, visits, bounces and bounce rate for a date range

umami_pageviews

Pageviews and sessions over time

umami_metrics

A ranked breakdown: type = path (top pages), referrer, country, browser, os, device and more

resend_send

Sends an email after you approve it. Without confirm=true it only returns a preview.

resend_emails

Sent emails, paged with a cursor

resend_domains

Sending domains and whether each is verified

Every tool returns structured data with a published schema, so an assistant can write code against the results instead of reading text. Date ranges take days (default 7) or ISO 8601 start and end. Errors always look like gauge.<module>.<code>: <message> Fix: <hint>.

Safety

  • Gauge only calls the services you configure. It sends nothing anywhere else and keeps no data.

  • resend_send sends real email, so you approve each one, not the assistant. When the assistant asks to send, Gauge asks you directly through your MCP client (MCP elicitation) and shows the sender, recipients and subject. The assistant can't answer that question for you.

  • Some MCP clients can't ask you questions yet. In those, Gauge refuses to send unless you've pre-approved the recipients with GAUGE_RESEND_ALLOWED_RECIPIENTS, or turned approval off with GAUGE_RESEND_REQUIRE_CONFIRM=false.

  • Give Gauge the least access it needs: a view-only Umami user, and a Resend key limited to sending if you don't need the other email tools.

Develop

uv venv && uv pip install -e '.[dev]'
.venv/bin/pytest

Security

Report a vulnerability privately through GitHub (Security tab, "Report a vulnerability"). See SECURITY.md. Every send you approve, decline or that gets refused is logged locally in ~/.local/state/gauge/approvals.jsonl (recipients and subject, never the message body). Set GAUGE_APPROVAL_LOG to move it.

License

MIT. Published by Seaynic Labs. Third-party skills are credited in CREDITS.md and keep their own licenses.


Built by Seaynic Labs. We build tools like this around a business's own systems: local-first, with a person approving every change. See custom integrations.

Available Tools

8 tools
gauge_modulesA
Read-only

Which modules are on, what settings are missing, and what each tool does. Pass a module name for its full settings list.

NameRequiredDescriptionDefault
moduleNo

Output Schema

NameRequiredDescription
skillsYes
modulesYes
versionYes
homepageNo
publisherNo
config_fileYes

TDQS

A3.8/5.0
Behavior4/5

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

The description adds concrete behavioral context beyond the readOnlyHint and openWorldHint annotations: it says the tool reports enabled modules, missing settings, tool descriptions, and module-specific settings. It does not mention authentication, rate limits, or error behavior, but the read-only annotation makes that less critical.

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 two compact sentences with no wasted words, and it front-loads the main capability before explaining the optional module-specific behavior.

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 simple, read-only inspection tool with one optional parameter and an output schema, the description covers the essential purpose and parameter behavior. It could be slightly stronger by clarifying the default/no-argument result, but no major information 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?

The schema has 0% description coverage for the single optional 'module' parameter. The description compensates partially by explaining that passing a module name returns its full settings list, but it does not specify valid module names, expected format, or the exact behavior when omitted.

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?

The description clearly states that the tool reports which modules are enabled, missing settings, and per-tool descriptions, and that a module name returns its full settings list. It identifies the resource and scope well, though it does not compare itself with any sibling tools.

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 second sentence gives an explicit usage instruction: pass a module name to get its full settings list. However, the description does not state when to use this tool instead of alternatives or clarify the no-argument case beyond implication.

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

resend_domainsA
Read-only

List sending domains and whether each is verified.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
domainsYes

TDQS

A3.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that: no mention of pagination/completeness (are all domains returned?), auth requirements, or rate limits for what is an external API call.

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?

A single front-loaded sentence with zero filler; the key attribute (verification status) is stated up front rather than buried.

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 parameters, an output schema, and annotations covering read safety, the description is nearly complete. The one missing piece is whether the listing is paginated or exhaustive, which matters for an open-world API.

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?

The tool takes zero parameters, and the description correctly implies a no-argument listing call. Nothing about parameter semantics needs to be, or is, explained.

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+resource (list sending domains) plus the informative payload (verified status), which cleanly separates it from siblings like resend_send and resend_emails. It stops short of explicitly naming an alternative, but the resource 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?

No explicit when-to-use or when-not-to-use guidance. The purpose implies the common use case (checking which domains are verified, e.g. before sending), but the agent must infer that routing rather than being told.

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

resend_emailsA
Read-only

List sent emails, newest first. Page with after=<next_after from the previous page>.

NameRequiredDescriptionDefault
afterNo
limitNo

Output Schema

NameRequiredDescription
emailsYes
has_moreYes
next_afterNo

TDQS

A3.5/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, so safety is covered; the description still adds real behavioral value by disclosing result ordering ('newest first') and the cursor-paging mechanism. It says nothing about when the listing ends, whether there is a max limit, or what happens with an invalid cursor.

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 short sentences, zero filler, with the core purpose and the paging instruction both front-loaded. Every clause carries information the agent needs.

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?

An output schema exists, so return values need not be described, and the pagination story is partially told. Still missing are termination behavior at the end of the list and any guidance on the limit parameter, which matter for a cursor-paged listing tool with 0% schema coverage.

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 0%, so both parameters are undocumented in the schema and the description must compensate. It explains 'after' well by tying it to the next_after value from the previous page, but 'limit' is never mentioned, leaving half the parameter surface unaddressed.

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 sent emails') and clarifies ordering ('newest first'), which importantly disambiguates the tool from its name, which reads like a re-send action. It never explicitly contrasts with the sibling resend_send, so the agent must infer the split between listing and sending.

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 usage (read a list of sent emails, page through it) and gives concrete paging mechanics, but offers no when-to-use/when-not guidance and no routing hint relative to resend_send or resend_domains. Adequate but inference-dependent.

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

resend_sendA

Send an email from the configured sender. Without confirm=true it only returns a preview. With confirm=true the person is asked to approve it (unless the recipients are pre-approved in settings); the assistant cannot approve on their behalf.

NameRequiredDescriptionDefault
toYes
htmlNo
textNo
confirmNo
subjectYes
reply_toNo

Output Schema

NameRequiredDescription
idNo
noteNo
sentYes
draftYes
approved_byNo

TDQS

A4.2/5.0
Behavior5/5

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

Annotations only declare the generic profile (not read-only, open-world, non-idempotent, non-destructive); the description adds the non-obvious two-phase preview/approval workflow and the human-in-the-loop gate that an agent absolutely must know about. The pre-approved-recipient bypass is a real behavioral detail not derivable from annotations or schema.

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 default (preview) mode stated first and the escalated (confirm) mode second. Every clause conveys actionable information; nothing is padded.

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 consequential outbound-send tool, the critical questions — does it actually send, and who approves — are answered, and an output schema covers return values. Remaining gaps are the untended body parameters (html vs text) and what the preview contains, which are secondary but not trivial.

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

Parameters2/5

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

Schema description coverage is 0% across six parameters, so the description must carry the burden. It explains only `confirm` meaningfully; `to`, `subject`, `html`, `text`, and `reply_to` get no guidance, and it never says whether html/text are alternatives, whether both are allowed, or what happens if neither is supplied.

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 ('Send an email from the configured sender') so an agent can immediately distinguish this from read-only siblings like resend_emails and resend_domains. It does not explicitly name the sibling it is not, but the write/send semantics make the boundary clear.

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

Usage Guidelines5/5

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

Explicitly describes both operating modes: without confirm=true it returns a preview only; with confirm=true a human approval step is triggered. It also names the exception (pre-approved recipients) and an important constraint (the assistant cannot approve on the user's behalf), which is exactly the routing knowledge an agent needs before calling.

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

umami_metricsC
Read-only

Ranked breakdown, highest count first. type: path (top pages), referrer, entry, exit, title, country, region, city, browser, os, device, language, screen, event, utmSource, hostname.

NameRequiredDescriptionDefault
endNo
daysNo
typeNopath
limitNo
startNo
offsetNo
searchNo
website_idYes

Output Schema

NameRequiredDescription
endYes
rowsYes
typeYes
limitYes
startYes
offsetYes
website_idYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The one genuine behavioral addition is the ordering guarantee ('highest count first'), which is useful. Nothing is said about the time window (how `days` interacts with `start`/`end`), how `search` filters, or pagination behavior.

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?

Two compact sentences with zero filler; the ordering behavior is front-loaded before the long enumeration. The type list is dense but each token is load-bearing as an allowed value.

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?

An output schema exists, so return shape need not be explained. However, for an 8-parameter analytics query the description never states the date-range semantics (default 7 days vs explicit start/end precedence) or what `search` does, leaving real gaps for correct invocation.

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 0% across 8 parameters, so the description carries the full burden. It does the single most valuable thing: enumerates the allowed `type` values, which the schema leaves as a bare string with a 'path' default. The remaining parameters (days, limit, offset, search, start, end, website_id) are undocumented but largely self-describing by name.

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

Purpose3/5

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

The description conveys that results are a ranked breakdown of some metric dimension, and the enumerated `type` values (top pages, referrer, country, browser, ...) strongly imply website analytics. But there is no verb and no mention of the resource being a website's metrics, and nothing distinguishes it from siblings like umami_stats or umami_pageviews.

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?

There is no explicit when-to-use guidance and no named alternative. An agent must infer from the type list that this is the tool for per-dimension breakdowns rather than aggregate stats, and must guess how umami_stats differs.

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

umami_pageviewsC
Read-only

Pageviews and sessions over time. unit: minute, hour, day, month or year.

NameRequiredDescriptionDefault
endNo
daysNo
unitNoday
startNo
timezoneNoUTC
website_idYes

Output Schema

NameRequiredDescription
endYes
unitYes
startYes
pointsYes
website_idYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing about default time window behavior, how 'days' interacts with 'start'/'end', timezone handling, or aggregation granularity—context that matters for a time-series query.

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?

Two short sentences with the core purpose front-loaded and zero filler. It is efficient, though the brevity comes at the cost of substance covered under other dimensions.

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

Completeness2/5

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

An output schema exists so return values need not be described, but with 6 parameters at 0% schema coverage and only 'unit' documented, an agent cannot confidently supply time ranges, timezone, or the required website_id from the description alone. Significant gaps remain.

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

Parameters2/5

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

Schema description coverage is 0% and there are 6 parameters, so the description carries the full burden. It documents only the 'unit' values, leaving website_id (required), days, start, end, and timezone entirely unexplained, and it never clarifies the precedence between 'days' and start/end.

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 resource (pageviews and sessions) and the temporal dimension ('over time'), so an agent knows this is a time-series retrieval tool. It does not distinguish itself from siblings like umami_stats or umami_metrics, so it falls 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 Guidelines2/5

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

There is no when-to-use guidance, no exclusions, and no mention of alternatives such as umami_stats or umami_metrics. The second sentence about units is parameter detail, not usage guidance.

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

umami_statsC
Read-only

Totals for one website. Range: last days days, or ISO 8601 start/end.

NameRequiredDescriptionDefault
endNo
daysNo
startNo
website_idYes

Output Schema

NameRequiredDescription
endYes
startYes
visitsYes
bouncesYes
visitorsYes
pageviewsYes
website_idYes
bounce_rateYes
total_time_secondsNo

TDQS

C2.4/5.0
Behavior2/5

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

The readOnlyHint annotation already covers the safety profile, and the description adds only the date-range window, which is mostly schema-level information. It says nothing about auth requirements, rate limits, or whether totals are scoped to a single site vs all sites beyond the vague "one website", so little behavior is disclosed beyond structured fields.

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?

Two short sentences, front-loaded with the resource and followed by the range rule; nothing wasted. Brevity is appropriate, though it is terse to the point of under-specification rather than sloppiness.

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 read-only tool with an output schema, return-value detail is not required, so the main gap is which aggregate is returned and how it relates to the sibling metric tools. Enough to invoke (website_id required, range modes given) but not enough to pick it with confidence among the umami family.

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 0%, and the description does clarify that `days` and `start`/`end` are alternative range modes (ISO 8601 for explicit dates) — valuable for two of the four parameters. It leaves `website_id` and the interaction rules (does `days` override `start`/`end`?) unstated, so it only partially compensates for the coverage gap.

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

Purpose2/5

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

"Totals for one website" restates the tool name (stats = totals) without naming which aggregate is returned (visitors, pageviews, bounce rate?) or how it differs from the sibling umami_metrics. A verb-like framing exists but the resource is left ambiguous, so an agent cannot confidently pick this over umami_metrics or umami_pageviews.

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?

The only guidance is about date-range modes (days vs start/end), which is invocation mechanics rather than when-to-use. Nothing tells the agent in which situation this tool should be chosen over umami_metrics, umami_pageviews, or umami_websites.

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

umami_websitesB
Read-only

List websites tracked in Umami. Paged: page starts at 1, page_size up to 100.

NameRequiredDescriptionDefault
pageNo
page_sizeNo

Output Schema

NameRequiredDescription
pageYes
totalNo
websitesYes
page_sizeYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, giving the safety profile. The description adds useful behavioral detail that page is 1-based and page_size caps at 100, which the schema does not state. It doesn't mention total counts or truncation behavior, but the annotations carry the main burden.

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 short sentences that are front-loaded with the purpose and immediately follow with the two parameter constraints. Nothing is wasted.

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 simple two-parameter read tool with an output schema already describing return values, the description covers purpose and the non-obvious paging constraints. The only gap is routing guidance among the many Umami siblings, which is a minor omission given the unambiguous resource.

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 0%, so the description must compensate, and it partially does: it clarifies 1-based paging and the page_size ceiling of 100. However, it doesn't explain defaults (page 1, page_size 20) or what happens when page exceeds the result set, leaving some semantics unstated.

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 websites tracked in Umami.' It's clear what the tool returns, but it doesn't distinguish itself from siblings like umami_stats or umami_pageviews beyond the nouns in their names.

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?

The description offers no when-to-use guidance or alternatives. It doesn't say to call this first to obtain a website ID for other Umami tools, which is the natural usage pattern implied by the sibling set.

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. 8 tool updatesv0.2.1
    • First observedgauge_modules
    • First observedresend_domains
    • First observedresend_emails
    • First observedresend_send
    • First observedumami_metrics
    • First observedumami_pageviews
    • First observedumami_stats
    • First observedumami_websites

TDQS

B3.4/5.0

Scored across 8 tools

Disambiguation4/5

The Umami tools are mostly differentiated by resource and shape: websites lists sites, stats gives totals, pageviews gives time series, and metrics gives ranked breakdowns. Stats and pageviews both concern analytics and could be slightly confused, but descriptions clarify the distinction; Resend and module tools are clearly separate.

Naming Consistency5/5

All tool names consistently follow a module_resource pattern in snake_case: umami_*, resend_*, and gauge_modules. The convention is predictable and readable throughout.

Tool Count5/5

Eight tools is well-scoped for a server combining Umami analytics reads with Resend email operations. Each tool covers a distinct capability without obvious redundancy.

Completeness4/5

The surface covers core analytics reading (sites, totals, time series, breakdowns) and email sending/listing/domain listing. Minor gaps exist, such as retrieving a single sent email's details or managing/verifying domains, but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to interact with Umami Analytics for both Cloud and self-hosted instances. It provides tools to retrieve website statistics, visitor metrics, pageview trends, and real-time active user counts.
    5
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Privacy friendly, cookieless web analytics built MCP-first. "Add analytics to my Next.js app" → an AI agent runs the setup_analytics_for_site tool, picks the right install snippet, edits your layout file, and verifies the script is loading. OAuth onboarding, no API keys to paste.
    28
    85 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Exposes Umami analytics (Cloud or self-hosted) as read-only tools for querying website stats, pageviews, metrics, and active visitors.
    3,160 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables natural-language analytics against Umami, including traffic stats, time series, sessions, custom events, and filtered breakdowns, plus self-hosted admin CRUD for websites, users, and teams, and client onboarding.
    48
    8 npm
    MIT