Adafruit IO MCP by usefulapi
Server Details
Read Adafruit IO feeds, data, groups and dashboards; publish a data point or create a feed.
The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.
If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.
- Status
- Unhealthy
- Uptime
- 99.0% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 17 tools
Each tool targets a distinct resource/scope, and the several feed-data readers (get_data_point, get_last_data, list_feed_data, get_feed_chart, get_feed_details) are clearly differentiated by id-based lookup vs. most-recent vs. paginated range vs. aggregation vs. metadata. get_feed vs. get_feed_details is the closest overlap, but the descriptions make the boundary explicit.
All tools use the same adafruitio_ prefix followed by a consistent verb_noun pattern (create_feed, get_*, list_*, publish_data_point). No mixed conventions or stray verbs.
17 tools is slightly heavy but reasonably earned given the breadth of the Adafruit IO domain (feeds, groups, dashboards, blocks, data, activities, user, throttle). Most tools map to distinct endpoints rather than redundant wrappers.
Read coverage is comprehensive, but the write surface is thin: create_feed and publish_data_point exist with no update_feed or delete_feed, and there are no dashboard/group/block mutation tools despite the API supporting them. Core read/publish workflows work, but agents will hit dead ends for management and cleanup operations.
Available Tools
17 toolsadafruitio_create_feedCreate feedAInspect
WRITE: create a new, empty feed (private by default), optionally inside an existing group. Adds a feed only; it does not change or delete anything existing, and fails if the name is taken. POST /feeds.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Feed name (the key is derived from it). | |
| group_key | No | Optional existing group key to create the feed in. | |
| description | No | Optional description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true, so the bar is lower. The description adds genuine context beyond them: feeds are private by default, the operation is additive only (no mutation/deletion of existing resources), and it fails when the name is taken — effectively confirming the non-idempotent, non-destructive profile with concrete consequences.
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 compact sentences with the operation type front-loaded and zero filler; the failure mode and the additive-only guarantee each earn their place. The trailing 'POST /feeds' is a small but non-redundant endpoint anchor.
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?
With no output schema the description would normally need to say more about results, but for a create operation the key agent-facing facts — default privacy, optional group nesting, additive-only behavior, and name-collision failure — are all present. Only the shape of the returned feed object is left unspecified, which is minor here.
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 100%, so the schema already documents name, group_key, and description including lengths and the key-derivation note. The description only echoes the group placement ('optionally inside an existing group') and adds no syntax or format 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('create a new, empty feed'), adds scope ('private by default, optionally inside an existing group'), and leads with a 'WRITE:' marker that instantly separates it from the read-oriented siblings like get_feed and list_feeds. An agent can distinguish this from every other tool in the set without opening a schema.
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?
Gives clear context for when to use it (creating a brand-new empty feed, optionally nested in a group) and a useful exclusion ('does not change or delete anything existing'). It does not name a sibling alternative or a prerequisite such as verifying the feed does not already exist, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_get_dashboardGet dashboardBRead-onlyInspect
One dashboard by key. GET /dashboards/{dashboard_key}.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_key | Yes | Dashboard key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered. The description adds nothing beyond restating the operation and its HTTP path — no note on auth requirements, what a dashboard contains, or behavior for an unknown key.
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 fragments, front-loaded with the resource, no filler. The trailing HTTP route is arguably redundant REST trivia, but it does not bloat the definition.
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?
This is a low-complexity single-parameter read tool with annotations covering safety and no output schema, so little is required. Still, the description says nothing about the returned dashboard structure or error behavior, leaving it merely adequate.
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 100% and the single parameter is documented as "Dashboard key." with length constraints, so the schema carries the semantics. The description only echoes the parameter name and adds no format or sourcing detail (e.g., where to obtain a dashboard key).
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?
"One dashboard by key" names a specific resource and singular scope, which implicitly distinguishes it from the sibling adafruitio_list_dashboards. The verb is weak ('one dashboard' rather than 'retrieve/fetch'), but the resource and cardinality are 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?
Usage is only implied: an agent can infer this is for fetching a single dashboard when the key is known. There is no explicit statement of when to use this versus adafruitio_list_dashboards, nor any prerequisite or error guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_get_data_pointGet data pointCRead-onlyInspect
One stored data point of a feed by its id. GET /feeds/{feed_key}/data/{id}.
| Name | Required | Description | Default |
|---|---|---|---|
| data_id | Yes | Data point id (the `id` field of a data point). | |
| feed_key | Yes | Feed key (the URL-safe key shown in Adafruit IO, for example 'temperature'; 'group-key.feed-key' also works). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is fully covered by structured data. The description adds essentially nothing behavioral beyond that — no note on error handling for a missing/invalid id, no pagination or result shape context. It does not contradict the annotations, but it is close to a restatement of the operation.
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 compact sentences, front-loaded with the resource and scope. The HTTP route is slightly redundant for an API wrapper but is cheap and occasionally useful; there is no filler.
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 two-parameter read with 100% schema coverage, full annotation coverage and no output schema, this is adequate but thin. It never says what a data point contains (value, timestamp) or what happens when the id does not exist, leaving the agent to discover the return shape empirically.
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 100%, with both feed_key and data_id documented including format hints ('group-key.feed-key' works, data_id is the id field of a data point). The description adds no parameter detail of its own, so the baseline of 3 applies.
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 names a specific resource and scope: a single stored data point of a feed, retrieved by its id, with the underlying HTTP route spelled out. This implicitly separates it from siblings that return collections or the latest value (adafruitio_list_feed_data, adafruitio_get_last_data), though it never names those alternatives explicitly.
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?
There is no when-to-use guidance, no statement of prerequisites, and no mention of alternatives for the case where the caller does not already have a data point id. The phrase 'by its id' hints at the precondition, but nothing routes the agent between this tool, adafruitio_list_feed_data, and adafruitio_get_last_data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_get_feedGet feedBRead-onlyInspect
One feed by key: name, description, unit, visibility, last value, status settings and the groups it belongs to. GET /feeds/{feed_key}.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_key | Yes | Feed key (the URL-safe key shown in Adafruit IO, for example 'temperature'; 'group-key.feed-key' also works). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the REST endpoint (GET /feeds/{feed_key}) and the shape of the response, but says nothing about auth requirements, rate limits, or error behavior when the key is unknown.
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 zero filler: the resource and returned fields come first, the endpoint second. Nothing is repeated from the schema or 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?
With one parameter, no output schema, and annotations covering safety, the description is close to sufficient — and the field enumeration usefully stands in for a missing output schema. Only the routing versus adafruitio_get_feed_details is left unaddressed.
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 100% and the single feed_key parameter is already documented in the schema, including the 'group-key.feed-key' form. The description adds no syntax or format detail beyond that, so the baseline of 3 applies.
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?
States a specific verb (get) and resource (one feed by key) and enumerates the returned fields, which is more than a restatement of the title. However, it gives no signal distinguishing it from the closely-named sibling adafruitio_get_feed_details, which an agent could easily confuse with it.
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?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as adafruitio_get_feed_details or adafruitio_get_last_data. The agent must infer selection purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_get_feed_chartGet feed chart dataARead-onlyInspect
Aggregated chart data for a feed: values sliced by resolution minutes over the last hours (or a start/end range), using avg, sum, min, max, val or val_count. Good for trends without downloading every point. GET /feeds/{feed_key}/data/chart.
| Name | Required | Description | Default |
|---|---|---|---|
| field | No | Aggregation (default avg). | |
| hours | No | Hours of history (ignored when start_time and end_time are given). | |
| end_time | No | ISO 8601 date or date-time, e.g. 2026-10-01T00:00:00Z. | |
| feed_key | Yes | Feed key (the URL-safe key shown in Adafruit IO, for example 'temperature'; 'group-key.feed-key' also works). | |
| resolution | No | Slice size in minutes. | |
| start_time | No | ISO 8601 date or date-time, e.g. 2026-10-01T00:00:00Z. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds the aggregation model and the endpoint path (GET /feeds/{feed_key}/data/chart), which is useful, but says nothing about rate limiting/throttling (a real concern on Adafruit IO, given the get_throttle sibling) or the response shape.
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 dense sentences: the aggregation and slicing semantics come first, the motivating use case second, the raw HTTP path last. Nothing is wasted and the most decision-relevant information is front-loaded.
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?
With no output schema, the description does describe what comes back (aggregated values over slices) and how time windows interact, which is the key mental model. It stops short of describing the response payload structure or any limits on returned slice counts.
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 100%, so every parameter (field enum, hours, resolution, start/end times, feed_key) is already documented. The description restates the aggregation field list and the resolution/hours slicing, but adds no format details 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.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (aggregated chart data) and resource (feed), and describes the mechanism precisely: values sliced by resolution over hours or a range, with one of six aggregation fields. It alludes to an alternative ('without downloading every point', i.e. list_feed_data) but never names the sibling, so differentiation is implied rather than explicit.
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 phrase 'Good for trends without downloading every point' implies the intended use case and gestures at when the full data listing is preferable, but there is no explicit when-to-use/when-not statement or named alternative tool. Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_get_feed_detailsGet feed detailsBRead-onlyInspect
A feed with its details block: first and last data point and the number of stored points. GET /feeds/{feed_key}/details.
| Name | Required | Description | Default |
|---|---|---|---|
| feed_key | Yes | Feed key (the URL-safe key shown in Adafruit IO, for example 'temperature'; 'group-key.feed-key' also works). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds the shape of the details block (endpoints/counts), which is useful, but says nothing about rate limits or error behavior for a non-existent feed.
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 no filler; the returned fields are front-loaded. The trailing raw endpoint 'GET /feeds/{feed_key}/details' adds little for an agent that already has the schema, but it is not harmful.
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 read-only tool with full schema coverage, the description is adequate but leaves the key disambiguation against adafruitio_get_feed unresolved, and no output schema exists to convey the response shape instead.
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 single parameter has 100% schema description coverage, including the 'group-key.feed-key' notation, so the schema carries the semantics. The description adds no parameter-level meaning beyond what the schema already states, making 3 the baseline.
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 names the resource and enumerates the returned details block ('first and last data point and the number of stored points'), so an agent knows exactly what payload to expect. However, it never distinguishes this from the sibling adafruitio_get_feed, which is the main ambiguity for tool selection.
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?
There is no guidance on when to call this instead of adafruitio_get_feed, adafruitio_get_last_data, or adafruitio_get_feed_chart. The only implicit signal is the returned fields, which the agent must infer from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_get_groupGet groupBRead-onlyInspect
One group by key with its feeds. GET /groups/{group_key}.
| Name | Required | Description | Default |
|---|---|---|---|
| group_key | Yes | Group key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description usefully adds that the response includes the group's feeds, which matters since there is no output schema, but it says nothing about auth requirements, rate limits, or error behavior.
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 terse fragments that are front-loaded with the outcome before the REST mapping. The endpoint string is slightly redundant with the name and annotations but does aid orientation; nothing is padded.
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 single-parameter read tool with full schema coverage and annotations covering safety, the description supplies what is needed plus the notable return detail (nested feeds). Only the lack of alternative-tool routing keeps it from being fully complete.
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 100%, so the single group_key parameter is fully documented in the schema, making 3 the baseline. The path template '/groups/{group_key}' confirms it is a path parameter but adds no new semantics beyond the 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?
States a specific verb and resource ('One group by key with its feeds'), including the scope of a single retrieval versus a collection. It distinguishes itself implicitly from adafruitio_list_groups by emphasizing 'one group', though it never names that sibling.
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?
There is no explicit when-to-use guidance, no prerequisites, and no mention of the obvious alternative (adafruitio_list_groups). Usage is only inferable from the singular 'one group by key' phrasing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_get_last_dataGet latest data pointBRead-onlyInspect
The most recent data point of a feed (value, location, created_at). GET /feeds/{feed_key}/data/last.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | Comma-separated fields to return: value, lat, lon, ele, id, created_at. | |
| feed_key | Yes | Feed key (the URL-safe key shown in Adafruit IO, for example 'temperature'; 'group-key.feed-key' also works). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description usefully discloses the return shape (value, location, created_at) — valuable since there is no output schema — but says nothing about auth requirements, rate limits, or what happens when the feed has no data.
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 tight sentences: the return contents are front-loaded and the endpoint reference is tucked in last. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with 100% schema coverage and annotations carrying the safety profile, the description covers purpose and return fields adequately. The remaining omissions (empty-feed behavior, how include interacts with the listed fields) are minor for an agent to call it correctly.
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 100%, so both feed_key and the include filter are already fully documented in the schema, including the 'group-key.feed-key' form. The description's parenthetical field list adds only marginal overlap with the include pattern, so the baseline 3 is appropriate.
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 gives a specific verb+resource ('the most recent data point of a feed') and even names the underlying endpoint, so the agent knows exactly what it fetches. It does not, however, distinguish itself from close siblings like adafruitio_get_data_point or adafruitio_list_feed_data, leaving the agent to infer the difference.
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?
There is no guidance on when to use this over adafruitio_get_data_point (a specific point) or adafruitio_list_feed_data (a range). No prerequisites or exclusions are stated; the agent must guess from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_get_throttleGet data rate limitARead-onlyInspect
The account's data rate limit (data-record modifications per minute: 30 on free accounts, 60 on Plus) and the current active data rate. Check it before publishing many points. GET /api/v2/{username}/throttle.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds real behavioral value beyond that: the exact throttle values, the per-minute unit of measure, and the literal endpoint GET /api/v2/{username}/throttle. It does not describe the response shape or any auth requirements, which keeps it below 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what is returned, followed by the actionable guidance and the endpoint. Every sentence carries information; nothing is redundant with the title.
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?
With no parameters, no output schema and safety already covered by annotations, the description supplies what an agent needs: the meaning of the values, the unit, the tier thresholds, and when to consult it. Only the exact response structure is left implicit, a minor gap given the reading returns two related values.
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 takes zero parameters, so there is nothing for the description to disambiguate and the baseline is 4. The description correctly implies the username is resolved from the endpoint path rather than supplied as an argument.
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 names a specific resource (the account's data rate limit and current active rate) with concrete semantics — data-record modifications per minute, quantified as 30 on free and 60 on Plus. An agent can distinguish this diagnostic from publishing siblings like adafruitio_publish_data_point without opening any schema.
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 gives explicit usage context: 'Check it before publishing many points,' which ties the tool to a concrete decision point involving a named sibling workflow. It stops short of stating when-not to call it (e.g. that it is unnecessary for single-point writes), so it is clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_get_userGet userARead-onlyInspect
The Adafruit IO account this key belongs to: id, name, username, time zone, created/updated times, plus the data rate limit when reported. GET /api/v2/user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds modest context: it identifies the account by 'this key' and flags that the data rate limit is only present 'when reported', but says nothing about auth prerequisites or failure modes.
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?
A single tight sentence front-loads the resource and its identity ('this key belongs to'), then lists returned fields and the endpoint. Zero filler, though the raw GET path is marginally redundant with the title.
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?
With no output schema, the description usefully documents what comes back (id, name, username, time zone, timestamps, rate limit), which is exactly the information an agent needs for this zero-parameter read. The conditionality of the rate limit is the only behavioral detail left slightly open.
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 takes zero parameters, so per the baseline this scores 4. The description's field list describes return values rather than parameters, adding no parameter meaning because there are none to clarify.
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 resource ('the Adafruit IO account this key belongs to') and enumerates the returned fields, which together with the title 'Get user' makes the verb+resource unmistakable. It is a unique sibling (no other *_user tool), so disambiguation is inherent rather than stated.
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?
No explicit when-to-use or when-not-to-use guidance and no alternatives named. Usage is implied by the tool's singular nature — it is the only user-fetching tool — but the description does not tell the agent when this call is warranted (e.g., for verifying rate limits or account context).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_list_activitiesList activity logARead-onlyInspect
The account's activity log (feed/data/dashboard changes), optionally within a time range. GET /activities.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum entries, 1-1000. | |
| end_time | No | ISO 8601 date or date-time, e.g. 2026-10-01T00:00:00Z. | |
| start_time | No | ISO 8601 date or date-time, e.g. 2026-10-01T00:00:00Z. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered without the description. The description adds useful scope context (account-level, change types, GET /activities endpoint) but says nothing about pagination or result ordering behaviour.
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?
One compact sentence plus the endpoint path; scope is front-loaded and nothing is padded. The trailing 'GET /activities' is arguably redundant with the name but harmless and cheap.
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?
No output schema exists, yet the description is adequate for a simple read-only list tool: it identifies the resource, the change types, and optional time filtering, with per-parameter detail supplied by the schema. Missing only edge behaviour such as max/default result count and sort order.
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 100%: limit has a range and both time params have ISO 8601 examples, so the schema does the heavy lifting. The description's 'within a time range' only restates what start_time/end_time already convey, adding no format or precedence detail (e.g. how equality boundaries are handled).
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?
States a specific verb (list) and resource (the account's activity log), and the parenthetical 'feed/data/dashboard changes' pins down exactly what record types appear, which the name 'activities' alone would leave ambiguous. No sibling tool in the list covers activity logging, so an agent can route here unambiguously.
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 phrase 'optionally within a time range' implies the common usage case but gives no explicit when-to-use / when-not criteria and names no alternative tool. Usage is inferable but not guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_list_blocksList dashboard blocksARead-onlyInspect
The blocks (widgets: gauges, toggles, charts, sliders...) of a dashboard with their feeds, position and properties. Integration secrets in properties are removed. GET /dashboards/{dashboard_key}/blocks.
| Name | Required | Description | Default |
|---|---|---|---|
| dashboard_key | Yes | Dashboard key. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/destructive/openWorld, so the bar is lower, and the description still adds real value: it discloses that integration secrets are stripped from properties, which is a meaningful data-safety detail an agent cannot infer from annotations. It also gives the underlying endpoint.
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?
Very compact: one sentence covering contents, the secrets-stripping caveat, and the endpoint. Front-loaded with the resource description. Slight redundancy with the endpoint line, but nothing wasteful.
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?
With no output schema, the description carries the burden of describing returns and does so (widgets, feeds, position, properties). For a single-parameter read tool with readOnly annotations, it is close to complete; only result shape depth (pagination/count) is unstated.
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 100% and there is only one required parameter, so the schema fully documents dashboard_key. The description only implies which dashboard via 'of a dashboard' and adds no format or example syntax beyond the 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 names the specific resource returned (dashboard blocks/widgets) and enumerates example widget types, so the agent knows exactly what this returns. It does not explicitly contrast itself with siblings like get_dashboard or list_dashboards, which is the only gap.
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?
There is no guidance on when to use this versus get_dashboard (which likely also surfaces blocks) or list_dashboards. The HTTP path implies a straightforward read, but no conditions or alternatives are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_list_dashboardsList dashboardsARead-onlyInspect
List the account's dashboards with key, name, description and visibility. GET /dashboards.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful behavioral context by naming the fields returned, which matters because there is no output schema. It does not cover pagination or result-size behavior, keeping it from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight fragments with the highest-value information (what is returned) front-loaded. 'GET /dashboards' is a mild redundancy for an MCP caller, but it is short and harmless.
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 parameterless read-only list tool with no output schema, the description supplies exactly the missing piece: the shape of the returned records. Safety context comes from annotations. Pagination/rate-limit behavior is the only remaining gap, which is minor here.
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 takes zero parameters, so per the baseline the description needs to add nothing. The listed return fields are not parameter semantics but do add adjacent value without conflicting with the empty 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?
Clear verb + resource: lists the account's dashboards, and it even enumerates the returned fields (key, name, description, visibility). It implicitly distinguishes itself from list_feeds/list_groups through the resource noun, but never names an alternative (e.g. get_dashboard for a single dashboard), so it stops short of full sibling differentiation.
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 scoping phrase 'the account's dashboards' implies when this tool applies, but there is no explicit when-to-use guidance and no mention of the sibling get_dashboard for retrieving one dashboard's detail. Usage is inferable from the name and resource rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_list_feed_dataList feed dataARead-onlyInspect
Data points of a feed (max 1000 per call). Newest first, except that with start_time the API returns the oldest page after that time. Filter by time range and limit; to read further back call again with the reply's next_page_args (the same filters plus before). GET /feeds/{feed_key}/data.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum records to return, 1-1000 (default 100). | |
| before | No | Pagination token: next_before from the previous reply (keep the same other arguments). | |
| include | No | Comma-separated fields to return: value, lat, lon, ele, id, created_at. | |
| end_time | No | ISO 8601 date or date-time, e.g. 2026-10-01T00:00:00Z. | |
| feed_key | Yes | Feed key (the URL-safe key shown in Adafruit IO, for example 'temperature'; 'group-key.feed-key' also works). | |
| start_time | No | ISO 8601 date or date-time, e.g. 2026-10-01T00:00:00Z. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so safety is covered. The description adds genuinely non-obvious behavior: a 1000-record cap and the ordering quirk that results are newest-first except when start_time is supplied, in which case the oldest page after that time is returned. It stops short of describing the response envelope beyond next_page_args.
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?
Three dense sentences with the core identity and the 1000-cap front-loaded, followed by ordering and pagination mechanics. Nothing is filler, though the trailing endpoint string is redundant with the tool name and could be dropped without loss.
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?
With 6 parameters, full schema coverage, no output schema and read-only annotations, the description supplies what is missing from structured data: page size cap, sort semantics, and the pagination loop. It could say more about the shape of the returned data set, but that gap is minor.
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 100% and every parameter is individually documented, so the baseline is 3. The description adds meaning the schema does not: the 1000-per-call interpretation of limit, the conditional effect of start_time on result ordering, and the intended use of before as an iteration token rather than a raw filter.
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?
States a specific verb-resource pairing ('Data points of a feed') and even names the underlying endpoint GET /feeds/{feed_key}/data, so the agent knows exactly what is returned. It does not explicitly distinguish itself from close siblings like adafruitio_get_last_data or adafruitio_get_data_point, whose purposes overlap, so it falls just short of the top band.
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?
Gives clear operational context: filter by time range and limit, and to read further back call again with the reply's next_page_args plus `before`. This tells the agent how to paginate, but it never states when to prefer this bulk listing over the single-point or last-value siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_list_feedsList feedsARead-onlyInspect
List all of the account's feeds with key, name, description, unit, visibility, enabled flag, last value and last update. GET /feeds.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds real value beyond that by disclosing the return payload (key, name, description, unit, visibility, enabled flag, last value, last update) and the underlying endpoint, which is important since no output schema exists.
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 tightly packed sentences with the scope ('all of the account's feeds') front-loaded, followed by the returned fields and endpoint. Every clause carries information; nothing is padded or repeated.
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 zero-parameter, read-only list tool with no output schema, the description is nearly complete: it compensates for the missing output schema by enumerating the returned fields and confirms the read nature via the GET endpoint. Only pagination/ordering behavior is unmentioned, a minor gap.
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 takes zero parameters, so per the rubric this is a baseline 4. The description correctly adds nothing about inputs, matching the parameterless 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?
States a specific verb and resource ('List all of the account's feeds') and enumerates the returned fields, which is far more concrete than a tautology. It distinguishes itself from the singular get_feed/get_feed_details siblings by the plural 'all' scope, though it never explicitly names those alternatives.
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?
No guidance on when to use this versus get_feed, get_feed_details, or list_feed_data. Usage is only implied by the word 'List'; there are no prerequisites, exclusions, or alternative routing mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_list_groupsList groupsARead-onlyInspect
List the account's groups (named sets of feeds) with their feeds. GET /groups.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered structurally. The description only adds the underlying HTTP endpoint (GET /groups), which is minor reinforcement rather than new behavioral context about return shape or result size.
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?
One tight sentence with a parenthetical definition, followed by the endpoint. Front-loaded with the action and resource, with no filler.
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 zero-parameter list tool, the description is nearly sufficient: it says results are groups 'with their feeds,' which hints at the return shape despite the absence of an output schema. It stops short of stating anything about ordering, result size, or pagination, but nothing essential to invoking the call is missing.
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 takes zero parameters, so the baseline for this dimension is 4. The description correctly introduces no parameter semantics, and there is nothing in the schema for it to elaborate on.
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?
States a specific verb and resource ('List the account's groups') and even disambiguates the domain term by defining a group as 'named sets of feeds.' Paired with the endpoint (GET /groups), an agent can distinguish this from siblings like get_group (single) or list_feeds (different resource) without opening the schema.
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?
There is no guidance on when to use this versus alternatives such as adafruitio_get_group (single group) or adafruitio_list_feeds (feeds only). The name implies the usage, but the description itself adds no when/when-not or prerequisites, so an agent must infer the routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
adafruitio_publish_data_pointPublish data pointADestructiveInspect
WRITE: publish one data point (a value) to a feed. This can drive REAL DEVICES: anything subscribed to the feed (relays, motors, lights, heaters, locks, dashboard toggles) will receive and may act on the value, and it cannot be undone from here. Only publish a value the user has asked for. Counts against the account's data rate limit (30 per minute on free accounts, 60 on Plus). POST /feeds/{feed_key}/data.
| Name | Required | Description | Default |
|---|---|---|---|
| ele | No | Elevation of the reading in meters. | |
| lat | No | Latitude of the reading. | |
| lon | No | Longitude of the reading. | |
| value | Yes | The value to publish (text or number, up to 1000 characters). | |
| feed_key | Yes | Feed key (the URL-safe key shown in Adafruit IO, for example 'temperature'; 'group-key.feed-key' also works). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it explains the real-world consequence (subscribed relays, motors, lights, locks act on the value), states the action is irreversible from here, and discloses concrete rate limits (30/min free, 60/min Plus). These are exactly the behavioral facts an agent needs and that destructiveHint/openWorldHint cannot convey.
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?
Front-loads 'WRITE:' so the operation class is visible at a glance, then packs consequences, consent constraint, rate limits, and endpoint into a few tight sentences. Every sentence carries load-bearing information.
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 5-param write tool with no output schema, the description covers consequences, irreversibility, rate limits, and consent. It omits any mention of authentication/permission requirements and what the call returns on success, which is a minor residual gap.
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 100%, so lat/lon/ele/value/feed_key are already fully documented in the schema and the description adds no per-parameter syntax or formatting guidance. Baseline 3 applies since the schema does the heavy lifting.
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?
States a specific verb ('publish'), the exact resource ('one data point (a value) to a feed'), and even the underlying endpoint POST /feeds/{feed_key}/data. It is trivially distinguishable from read-side siblings like adafruitio_get_data_point and adafruitio_list_feed_data.
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 constrains when to use it ('Only publish a value the user has asked for') and frames it as the write counterpart to the many read-only siblings. It does not name a competing tool, but no sibling writes a data point, so the routing risk is low.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Related MCP Connectors
Read monitors, incidents, heartbeats, on-call and status pages; acknowledge or resolve incidents.
Read Buttondown subscribers, emails, analytics and automations; add subscribers; write email drafts.
Read NS1 zones, records, monitors, data feeds and usage; create or update one DNS record.
Read audiences, members, campaigns and reports; add, update, tag and archive subscribers.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAccess Home Assistant data and control devices (lights, switches, thermostats, etc).6 npm576Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables interaction with Neptune Apex aquarium controllers through their local REST API, providing read-only monitoring of probes, outlets, power, inputs, and history by default, with opt-in write tools for outlet control, feed cycles, and guarded program edits.AGPL 3.0
- AlicenseNot gradedqualityDmaintenanceEnables AI clients to connect to live IoT deployments, read devices, provision hardware, deploy automation rules, manage alarms, and send commands to physical equipment.MIT

TagoIO MCP Serverofficial
AlicenseNot gradedqualityBmaintenanceEnables AI models to interact with TagoIO IoT platform accounts, providing access to device management, real-time data analysis, and AI-powered code generation for IoT development workflows.33 npm9ISC
Glama MCP Gateway
Add one secure layer between your agents and this server.