signoz-funnel-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@signoz-funnel-mcpshow funnel for latest agent trace"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.

Funnel of Thought
An AI agent that watches itself think — and tells you the exact step where it stopped.
▶ Watch the 3-min demo · Try it live · Read the blog

plan → tool → validate → respond is a contract. Most agents are trusted to
honour it and never measured against it. Funnel of Thought measures it, as a
conversion funnel, in SigNoz, live — and ships the funnel MCP tools that let
the agent run that measurement over its own traces without a human in the loop.
The 30-second version
My agent has a validation step. A dashboard said it ran in 100% of runs. A funnel over the same 125 traces said 64%.

Both queries are correct. They answer different questions — and 45 runs emitted
their validate span before the tool result existed, so the agent validated
an answer that had not arrived yet. Every presence-based metric you own scores
those runs as a success.
A counter measures presence. A funnel measures sequence. Only one of those is the contract.

The read path is deterministic REST over spans that already landed. No LLM
sits between you and the answer, so building a funnel and reading it back is a
sub-second operation you can repeat while the agent is still running. Inject a
validation regression and watch the validate bar sink and the alert fire
while you are still looking at the screen.
SigNoz already markets Trace Funnels for exactly this shape of problem — tracking "drop-offs across your AI agent pipelines." As far as I can find, it is the only trace-native funnel primitive in an open-source APM, and they pointed it at agents first. This project is the adapter that makes that pairing work on a stock-OpenTelemetry agent, plus the five MCP tools that make it reachable from inside one.
Related MCP server: dat-ai-mcp
The problem
Every LLM-observability tool shows you traces — Langfuse, LangSmith, Phoenix, Braintrust. Checking their docs in July 2026 I could not find a funnel primitive in any of them: a way to ask "of the runs that started reasoning, what fraction completed each step, in order?" SigNoz has one. (Corrections welcome — that claim is about what I could find documented, not a proof of absence. Datadog ships funnel analysis for RUM, but over page views, not spans.) Pointing it at a spec-compliant agent needs things I could not find written down anywhere. Building this surfaced six of them — the blog has the full story; in short:
Steps match on the exact span name — no wildcards. The name you pick is load-bearing.
OTel's GenAI convention puts the model inside the span name (
chat gemini-3.1-flash-lite), so one logical step fragments across N names on any model swap, and the funnel silently reads 0%. Two correct specs, quietly incompatible.A zero-match step returns
HTTP 500: unsupported value: NaNfrom the overview endpoints, while/analytics/stepsreturns a clean 0 — so through the endpoint the charts use, a broken funnel is indistinguishable from an honest 0%. The NaN comes from aggregates over an empty set (avgIf/quantileIf), not from the conversion division, which is already guarded. Filed as #12143.latency_type: "p50"silently returns p99 (measured: p50 = p99 =18.67, p90 =17.96). Filed as #12220 with PR #12221.Funnels need strictly increasing timestamps — steps inside one clock tick collapse to ~0 and 500. The single most useful undocumented thing we learned.
0 of SigNoz's 41 MCP tools touch funnels — so
signoz-funnel-mcpships the five that do. Verify it yourself against the live server rather than taking my word:python scripts/mcp_gap.py --list, also asserted as step 5 ofreproduce.sh.
The boundary that isn't a bug: funnels are minIf + monotonic — they see
first occurrence and enforce order, so they're blind to loops and retries.
That's not fixable and defines where the instrument applies: funnel the linear
contract; loops want a graph.
It runs in SigNoz, not just in my terminal
The funnel is a real SigNoz object — the CLI and SigNoz's own UI agree to the decimal:

And the violation is visible in a single trace — agent.validate in red,
finishing before the agent.tool call whose output it was supposed to check:

Architecture

A 4-node Gemini agent emits stock-OTel spans → SigNoz (cast by Foundry) stores
and funnels them → the fot CLI, signoz-funnel-mcp,
and a dashboard + alert read the result. Everything past the agent is
deterministic — zero LLM calls at runtime. The loop closes when the agent
calls get_funnel_analytics through the MCP server and reads its own conversion
rate — the hop that didn't exist before, because no MCP tool reached funnels.
Quickstart
Needs: Docker and Python 3.11+. A Gemini key is optional — with no key everything below runs in --stub mode: identical span shape, zero LLM calls, seconds instead of minutes. Windows: scripts/setup.ps1 is a full port of setup.sh; reproduce.sh needs Git Bash.
git clone https://github.com/wiz-abhi/funnel-of-thought && cd funnel-of-thought
foundryctl cast # SigNoz + its MCP server (casting.yaml, pinned v0.132.2)
# create the admin account at http://localhost:8080, then:
cp .env.example .env # optional: set GEMINI_API_KEY for live latencies
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\Activate.ps1
pip install -e ".[all]"
./scripts/setup.sh # token, traces, funnels, dashboard, alert, gauges
fot show # the cliff, n on every bar
fot counter-proof # naive counter beside the ordered funnelNo
foundryctl?docker compose -f pours/deployment/compose.yaml up -d(the committed forge output). Funnel writes need an editor JWT, not an API key —scripts/setup.sh --tokenmints one into.env(re-run on a 401; access tokens expire in ~30 min).foundryctl castrunsforgefirst, which rewritespours/. Verified on foundryctl v0.2.11: the regenerated output is byte-identical to what is committed here, socastleaves a clean git tree. If you already have SigNoz containers from another project,castwill stop on a name conflict — remove the stale container it names and re-run.
The judge path — five assertions, ~2 minutes:
./scripts/reproduce.shMeasured end to end at 1m43s on a laptop. It generates a two-model batch, builds the funnels, prints the working cliff, reports the missing-vs-misordered split, points the fragmented funnel at a bumped model version and shows the 500: unsupported value: NaN verbatim, then measures SigNoz's own MCP server and confirms 41 tools, 0 reaching funnels. It maintains a failure counter and exits non-zero if any assertion fails.
It generates with --stub by default even when a Gemini key is present — free-tier pacing is 12 RPM across 3 calls per run, so 60 traces live is ~15 minutes. Every assertion is about span order and span names; none reads a model's output, so the results are identical. --live opts into real model latencies in the waterfall and costs the extra ~14 min. --no-gen reuses traces already in SigNoz (~20s).
What it does and doesn't prove. The drop-off rate is injected, not discovered: --validate-rate 0.64 decides how many runs honour the contract, and the funnel's job is to recover 64% from the traces alone while a presence counter insists on 100%. That makes this a calibration harness, and the known injection rate is exactly what makes the counter's answer demonstrably wrong rather than merely suspect. What is not authored is the span-name fragmentation: stock OpenTelemetry named those spans and an ordinary version bump did the rest.
Run the tests (no SigNoz, no Docker, no key needed):
pytest -qMCP (Claude Desktop / Code / Cursor): point a signoz-funnel server at signoz-funnel-mcp with SIGNOZ_URL + SIGNOZ_JWT, then ask "build a funnel over my agent's reasoning steps and tell me which step is losing traces." Five tools: create_funnel, get_funnel_analytics, get_funnel_slow_traces, list_funnels, delete_funnel. Config in signoz_funnel_mcp/README.md.
How it uses SigNoz
Remove SigNoz and this project cannot exist — there is no funnel primitive anywhere else to port to. Every surface is load-bearing:
Surface | How it's used |
Traces | Stock-OTel agent spans are the raw material every funnel is computed over. |
Trace Funnels | The core primitive and the product — two funnels over one dataset (stable node spans → the cliff; the GenAI |
Query Builder | The counter-proof: |
Metrics | Per-step conversion re-emitted as OTel gauges, turning a point-in-time funnel into a monitorable time series. |
Dashboards + Alerts | Dashboard-as-code charts validate-conversion; a threshold rule fires when it drops — what makes the live demo live. |
MCP |
|
What's novel
A funnel over cognition, not commerce — pointing Trace Funnels at an agent's reasoning contract. I found no prior worked example of this on a stock-instrumented agent.
The five missing MCP tools — an agent could reach every SigNoz surface except the one that measures its own completion rate. Now it can.
A named, reproducible incompatibility between two correct specs — OTel GenAI says a span name describes the model; Trace Funnels say it identifies a step. Together they silently produce 0%. Generalises to any exact-match matcher.
Pre-registration —
PREDICTION.mdcommitted before any data was read, with falsification criteria and a control funnel. The drop-off is attributable, not asserted.Speed as the feature — no LLM on the read path, so build → read → change → read runs sub-second on live data. That's what lets an agent measure itself in real time.
AI usage disclosure
Per the hackathon rules: Claude Code was used as a development assistant — scaffolding, reviewing the ClickHouse/Go analysis behind the NaN diagnosis, and editing prose here and in the blog. Every architectural decision, both bug diagnoses, and every claim of fact were made and verified by a human against a live SigNoz instance.
No AI writes to the shipped runtime — the MCP server, CLI, dashboard and alert make zero LLM calls; pure REST plus arithmetic. The only model in the system is the one being observed: agent/ calls free-tier Gemini offline to generate the traces the funnel measures. Swap it for any OTel-instrumented agent and everything else works unchanged. All project code was written after the hackathon opened on 2026-07-20.
Limitations
Funnels can't see loops.
minIf+ monotonic step index → first occurrence wins, order enforced, so retry storms are invisible. A real ceiling on the primitive, not our code; a loop-aware graph view is the natural complement (funnel the linear contract; loops want a graph).The observed agent is authored — we wrote the 4-node agent for a clean
validatenode, and say so. What's not authored is the defect: stock OTel named the spans and an ordinary model swap did the rest. "Unauthored defect," never "unauthored agent."Exact-name matching is a constraint, not a bug — it's what keeps the query fast. The lesson: key funnels on names that are identities (
agent.validate), not descriptions (chat gemini-3.1-flash).Single-service scope — every funnel here is over one
service.name; cross-service is untested.Upstream is open, not merged — #12143 filed + diagnosed; #12220 + PR #12221 for the p50 bug. Described as filed/open/proposed throughout — never merged.
Repository layout
agent/ 4-node LangGraph agent + batch trace generator
signoz_funnel_mcp/ MCP stdio server — the five missing funnel tools (+ tests/)
fot/ core library + `fot` CLI (+ tests/)
web/ the hosted demo page (FastAPI + a static build)
dashboards/ dashboard-as-code (SigNoz v5 schema)
alerts/ drop-off threshold alert
scripts/ setup.sh / setup.ps1 / reproduce.sh
blog/ the write-up, its figures, and the video toolchain
docs/media/ README banner, hero GIFs, architecture sketch
spikes/ findings from the exploratory phase
.github/workflows/ CI: tests + lint on Linux and Windows, no SigNoz needed
casting.yaml Foundry installation spec (committed)
casting.yaml.lock forged lockfile (committed)
pours/ forged deployment manifests (committed)
docker-compose.yml OUR containers, joined to signoz-network
PREDICTION.md pre-registered hypotheses, committed before data131 unit tests, none of which need SigNoz, Docker, or an API key:
pytest -q. CI runs them plus ruff on Linux and Windows, and asserts that the
--json contract scripts/reproduce.sh parses still exists — the wiring bug
that class of test is there to prevent.
Acknowledgements
To the SigNoz team, for building the funnel primitive nobody else in open-source APM seems to have, and for making the source readable enough that both bugs here could be root-caused from it in an afternoon. To kunalpandey1 for PR #12160. To WeMakeDevs and SigNoz for the Agents of SigNoz hackathon.
License
MIT.
Available Tools
5 toolscreate_funnelA
Create a SigNoz trace funnel and set its steps in a single call.
This wraps two REST calls (POST /new then PUT /steps/update) and
handles the undocumented requirements that make hand-rolling them fail:
millisecond timestamps on both, the mandatory timestamp on the update,
and omitting each step's id so SigNoz mints a valid UUID. If setting
steps fails, the empty funnel is deleted rather than left behind.
Args:
name: Funnel name, e.g. "agent-tool-pipeline".
steps: Ordered list of at least 2 steps. Each is a dict with:
* ``service`` (required) -- the service name as it appears in traces
* ``span`` (required) -- the exact span name
* ``name`` (optional) -- friendly label for charts
* ``latency_type`` (optional) -- ``"p90"``/``"p95"``/``"p99"``
(default ``p99``; **``p50`` is not implemented by SigNoz** and
silently yields p99 -- you will get a warning back)
* ``has_errors`` (optional) -- only match errored spans
Example::
[{"service": "frontend", "span": "GET /cart", "name": "browse"},
{"service": "payments", "span": "charge", "name": "pay"}]Returns:
funnel_id, the normalized steps, and any warnings.
Note: All steps must occur within the same trace. SigNoz matches the first occurrence of each step and enforces order, so funnels cannot see loops or retries.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| steps | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it excels. It exposes concrete implementation details: millisecond timestamps, mandatory 'timestamp' in update, omitting step 'id' to let SigNoz generate UUID, automatic cleanup of empty funnels on failure, and the caveat that 'p50' silently yields p99. This is far beyond what a typical tool description provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although lengthy, the description is well-organized with clear sections (Args, Returns, Note) and an example. Every sentence adds value—explaining undocumented requirements, defaults, and edge cases. There is no fluff, and the structure allows an agent to quickly locate parameter details and behavioral notes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is complex (wrapping two REST calls, with tricky requirements), yet the description covers all significant aspects: purpose, parameters, return values, error handling, and limitations. The presence of an output schema is not necessary because the description already outlines what is returned (funnel_id, steps, warnings). It leaves no major gaps for an agent to fill.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is minimal (name and steps, with steps as a generic array of objects). The description compensates fully by specifying each required and optional field inside a step (service, span, name, latency_type, has_errors), defaults, examples, and the meaning of 'latency_type' with the p50 caveat. It also gives a concrete example of the steps array, making parameter usage unambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's primary function: 'Create a SigNoz trace funnel and set its steps in a single call.' It names the specific resource (SigNoz trace funnel) and the verb (create/set), which distinguishes it from siblings like list_funnels, delete_funnel, and analytics tools. No ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the tool's scope by noting it wraps two REST calls and handles undocumented requirements, which implies this is the recommended way to create funnels. It also gives a key limitation: 'All steps must occur within the same trace' and that funnels cannot see loops/retries. However, it doesn't explicitly compare to alternatives or say 'use this when X'—though siblings are clearly different operations, so the guidance is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_funnelA
Permanently delete a trace funnel by id.
Irreversible. Use list_funnels first to confirm you have the right id.
| Name | Required | Description | Default |
|---|---|---|---|
| funnel_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly discloses the most critical behavioral trait: irreversibility ('Permanently delete' and 'Irreversible'). It stops short of describing permissions, error handling, or scope of deletion, but for a simple delete tool, this is solid coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the action front-loaded and the warning immediately following. Every word earns its place, and the structure is highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter nature, the presence of an output schema, and the explicit irreversibility warning, the description is nearly complete. It could add details about permissions or failure outcomes, but these are not essential for a straightforward delete tool. The guidance to list first adds valuable context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It indirectly explains funnel_id by saying 'by id' and recommending list_funnels to confirm the id. However, it does not explicitly describe the id format or provide details beyond the schema's title. For a single, self-explanatory parameter, this is adequate but not outstanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does: 'Permanently delete a trace funnel by id.' It uses a specific verb (delete), identifies the resource (trace funnel), and clearly distinguishes from sibling tools like list_funnels and create_funnel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use ``list_funnels`` first to confirm you have the right id.' This tells the agent when to use this tool relative to an alternative and even gives a prerequisite step, making usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_funnel_analyticsA
Measure a funnel: per-step conversion with trace counts, plus end-to-end metrics.
Identify the funnel by either funnel_id or funnel_name.
Every step row carries an explicit n (number of traces reaching that
step) alongside its conversion percentages, so any chart built from this
can label each bar with its sample size.
Args:
funnel_id: The funnel's UUID.
funnel_name: Its name (resolved to an id for you). Ignored if
funnel_id is given.
time_range: Relative window like "30m", "24h", "7d",
"2w". Converted to the nanosecond bounds the API needs.
Returns:
steps (one row per step: n, errors,
conversion_from_previous_pct, conversion_from_start_pct,
dropped_from_previous), end_to_end metrics, and totals.
Note:
When zero traces complete a step, SigNoz returns HTTP 500
unsupported value: NaN instead of a 0% result (SigNoz issue
#12143). This tool detects that and reports a clean zero, flagged via
end_to_end.zero_trace_fallback.
If a step shows 0 traces, read ``diagnostics``. Besides a wrong span
name, the usual culprit is that SigNoz enforces step ordering
**strictly** (``t_next > t_prev``): spans that complete within the same
clock tick -- instantaneous no-ops -- are not counted as ordered and
will silently under-count even when the sequence is correct.
``end_to_end.errors`` is a MAX across steps, not a sum, and its
``latency`` is hardcoded to p99 by SigNoz -- both are restated in
``end_to_end.caveats``.
| Name | Required | Description | Default |
|---|---|---|---|
| funnel_id | No | ||
| time_range | No | 24h | |
| funnel_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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 so thoroughly. It discloses the SigNoz HTTP 500 NaN bug and zero_trace_fallback, the strict step ordering causing under-counts, the semantics of errors as a MAX, and latency hardcoded to p99. These are behavioral insights far beyond a basic operation description.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with Args, Returns, and Notes sections, keeping details organized and front-loaded. Every sentence provides useful information, including edge-case caveats, without fluff. It is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (per context signals), the description still explains the return structure, parameter semantics, and critical gotchas. For a tool with this complexity—two identifying parameters, time-range conversion, and known SigNoz quirks—the description is fully complete and self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain all parameters. It does so completely: funnel_id (UUID), funnel_name (resolved to id, ignored if id given), and time_range (with examples and note about nanosecond conversion). This adds significant meaning beyond the bare schema properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with "Measure a funnel: per-step conversion with trace counts, plus end-to-end metrics," a specific verb+resource that clearly states what the tool does and distinguishes it from sibling tools like list_funnels, create_funnel, and get_funnel_slow_traces. The name and description together make the tool's function unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool ('Measure a funnel...') and explains identification via funnel_id or funnel_name. It does not explicitly mention alternatives or when not to use this tool, but the context is sufficiently clear, so it meets the 'clear context, no exclusions' bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_funnel_slow_tracesA
Fetch the slowest traces for one step transition of a funnel.
Use this after get_funnel_analytics shows a drop-off or a high latency
between two steps -- it gives you concrete trace ids to open in SigNoz.
Args:
funnel_id: The funnel's UUID.
funnel_name: Its name, as an alternative to the id.
time_range: Relative window, e.g. "24h".
step_start: 1-based index of the transition's first step.
step_end: 1-based index of its second step. Must differ from
step_start.
Returns:
Up to 5 rows of {trace_id, duration_ms, span_count}, plus
error_traces sampled from the same transition.
Note:
At most 5 rows. SigNoz hardcodes ORDER BY duration_ms DESC LIMIT 5; there is no way to page or raise it. The query is also pairwise --
it measures step_start to step_end only, not the whole funnel.
| Name | Required | Description | Default |
|---|---|---|---|
| step_end | No | ||
| funnel_id | No | ||
| step_start | No | ||
| time_range | No | 24h | |
| funnel_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral constraints: the hardcoded ORDER BY duration_ms DESC LIMIT 5 with no paging, the pairwise nature of the query, and the return shape including error_traces. This is exactly the kind of non-obvious behavior an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a one-sentence summary, then organized into Args, Returns, and Note sections. Each sentence adds necessary context; the length is justified by the tool's complexity and the lack of annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema is present (as indicated by context signals), but even without it, the description states the return format (up to 5 rows of trace_id, duration_ms, span_count plus error_traces) and key limitations. Combined with parameter semantics and usage guidance, it is fully contextual for an agent to select and invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description defines all 5 parameters with meaningful semantics: funnel_id as UUID, funnel_name as alternative, time_range as relative window ('24h'), and step_start/step_end as 1-based indices with the constraint that they must differ. This fully compensates for the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Fetch the slowest traces for one step transition of a funnel.' It clearly differentiates from siblings by positioning itself as the follow-up to get_funnel_analytics, providing trace IDs rather than analytics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'Use this after get_funnel_analytics shows a drop-off or high latency between two steps.' It also clarifies scope (pairwise transition not whole funnel) and row limits, but does not explicitly name alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_funnelsA
List every SigNoz trace funnel, with its id, name, and step definitions.
Start here when you have a funnel name but need its id, or to check whether a funnel already exists before creating a duplicate.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently explains that it lists all funnels and what fields are returned, which is a strong signal of a read-only operation. However, it does not mention potential limitations (e.g., pagination, filtering, auth) or whether 'every' truly means all across all scopes, leaving a minor gap. Still, for a zero-parameter list tool, the transparency is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and output, followed by a precise usage hint. Every word earns its place with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with zero parameters and an output schema, the description covers purpose, scope, and usage context sufficiently. The output schema handles return details, so the description does not need to explain them further. The explicit 'Start here' guidance ties it well to the sibling-tool context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the description naturally omits parameter details. Per the rubric, a baseline of 4 applies when there are no parameters to describe, and this description does not need to compensate for any schema gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List every SigNoz trace funnel') and the specific resource, including the returned fields (id, name, step definitions). It also differentiates from sibling tools by framing the use case ('need its id', 'check whether a funnel already exists before creating a duplicate'), which implies a read-only listing versus the create/delete/analytics tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool: 'Start here when you have a funnel name but need its id, or to check whether a funnel already exists before creating a duplicate.' This provides clear situational context and implicitly contrasts with the create_funnel sibling, satisfying the when/alternatives guidance.
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.
5 tool updates
v0.1.0- First observed
create_funnel - First observed
delete_funnel - First observed
get_funnel_analytics - First observed
get_funnel_slow_traces - First observed
list_funnels
TDQS
Each tool has a distinct, non-overlapping purpose: listing, creating, deleting, analyzing, and fetching slow traces. The descriptions clearly differentiate the data returned and the actions performed, leaving no ambiguity about which tool to select.
All tool names follow a consistent verb_noun snake_case pattern: list_funnels, delete_funnel, create_funnel, get_funnel_analytics, get_funnel_slow_traces. This makes the tool's action and target predictable across the entire set.
Five tools is well-scoped for a funnel management server, covering core operations (list, create, delete) plus analytical queries (analytics, slow traces). No redundant or missing tools that would undermine the set's focus.
The set provides create, read, and delete functionality, plus analytics and slow traces. The only notable gap is the lack of an update operation to modify an existing funnel's steps or name, which could be worked around by delete and recreate but is not ideal.
Maintenance
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
Analytics your AI agent can actually use. Track, experiment, and optimize via MCP.
MCP-first toolbox for agents: KV storage, auth, queue, and utility tools. Free in early access.
- SpanlyOAuthcom.spanly
MCP observability. Query live traffic, errors, duration, and alerts from your AI agent.
Hosted MCP runtime where the agent is the operator: sign up by tool call, publish your own tools.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server that gives AI agents access to your application's OpenTelemetry traces for querying, analysis, and debugging.5122MIT
- AlicenseAqualityBmaintenanceProvides browser automation, audio transcription, and LLM chat as MCP tools for any agent.7MIT
- AlicenseNot gradedqualityDmaintenanceProvides unified AI agent observability including tracing, cost tracking, performance monitoring, anomaly detection, and audit trails via MCP.55MIT
- AlicenseNot gradedqualityCmaintenanceProvides agent-native analytics and logging for coding agents, enabling product analytics, error logging, and deploy attribution through an MCP handoff.31MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/wiz-abhi/funnel-of-thought'
If you have feedback or need assistance with the MCP directory API, please join our Discord server