Read Adafruit IO feeds, data, groups and dashboards; publish a data point or create a feed. Hosted by usefulapi — connect from Claude, Cursor, or any MCP client.
Team and Enterprise: an Owner adds the connector for the organization first.
Run this command, then run /mcp in Claude Code to log in:
Add to Cursor or add this to ~/.cursor/mcp.json:
{
"mcpServers": {
"adafruit-io": {
"url": "https://adafruit-io.usefulapi.io/mcp"
}
}
}Add to VS Code or add this to .vscode/mcp.json:
{
"servers": {
"adafruit-io": {
"type": "http",
"url": "https://adafruit-io.usefulapi.io/mcp"
}
}
}Other MCP clients (Windsurf, Cline, Zed and more): add the URL as a remote MCP server (Streamable HTTP). The client then opens the login page in your browser. Do not add an Authorization header: see Before you connect.
The login page asks for your Adafruit IO username and Adafruit IO key (AIO key).
Find both at io.adafruit.com → click My Key (top right). The AIO key gives full access to your account, including publishing to feeds that can drive your devices; regenerating it there cuts this server off at once. Your key is used only to call the Adafruit IO API on your behalf; it is never shown to anyone.
Add only the URL. Do not add an Authorization header or an API key to the client config. The server signs you in with OAuth: the login page asks for your Adafruit IO username and Adafruit IO key (AIO key). If the config has such a header, remove it: some clients then send that header instead of the login token, and every call fails with 401.
| Tool | Type | What it does |
|---|---|---|
adafruitio_get_user | read | Get user 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. |
adafruitio_get_throttle | read | Get data rate limit 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. |
adafruitio_list_feeds | read | List feeds List all of the account's feeds with key, name, description, unit, visibility, enabled flag, last value and last update. GET /feeds. |
adafruitio_get_feed | read | Get feed One feed by key: name, description, unit, visibility, last value, status settings and the groups it belongs to. GET /feeds/{feed_key}. |
adafruitio_get_feed_details | read | Get feed details A feed with its details block: first and last data point and the number of stored points. GET /feeds/{feed_key}/details. |
adafruitio_list_feed_data | read | List feed data 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. |
adafruitio_get_last_data | read | Get latest data point The most recent data point of a feed (value, location, created_at). GET /feeds/{feed_key}/data/last. |
adafruitio_get_data_point | read | Get data point One stored data point of a feed by its id. GET /feeds/{feed_key}/data/{id}. |
adafruitio_get_feed_chart | read | Get feed chart data 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. |
adafruitio_list_groups | read | List groups List the account's groups (named sets of feeds) with their feeds. GET /groups. |
adafruitio_get_group | read | Get group One group by key with its feeds. GET /groups/{group_key}. |
adafruitio_list_dashboards | read | List dashboards List the account's dashboards with key, name, description and visibility. GET /dashboards. |
adafruitio_get_dashboard | read | Get dashboard One dashboard by key. GET /dashboards/{dashboard_key}. |
adafruitio_list_blocks | read | List dashboard blocks 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. |
adafruitio_list_activities | read | List activity log The account's activity log (feed/data/dashboard changes), optionally within a time range. GET /activities. |
adafruitio_publish_data_point | write | Publish data point 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. |
adafruitio_create_feed | write | Create feed 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. |
adafruitio_usage_status | Usage status (free-tier meter) Report the caller's current free-tier usage this month: calls used, monthly limit, remaining, and whether the cap is reached. Read-only; does not count against the meter. | |
adafruitio_request_feature | Request a missing feature Tell usefulapi that the user needs something the Adafruit IO tools cannot do yet (a missing tool, field or filter). Call it only when the user asks for something none of the tools can do, and tell the user that you send the request. Do not call it for errors or for normal requests. Do not include personal data, credentials or customer records. Stored with the product name and the client type (for example Claude or Cursor), without the user's account. At most 5 requests per day. Does not count against the meter. | |
adafruitio_upgrade | Upgrade to Pro (unlimited) Subscribe to the Pro plan for UNLIMITED Adafruit IO tool calls (the free tier caps monthly usage). Choose monthly ($9/month) or yearly ($90/year — 2 months free) billing. Returns a Stripe Checkout link to open in your browser; after payment your account upgrades automatically. Does not count against the meter. | |
adafruitio_cancel_subscription | Cancel the Pro subscription Cancel the caller's Adafruit IO Pro subscription at the end of the paid period (no refund for the current period; unlimited calls continue until then, then the free tier applies). Requires confirm: true. Run adafruitio_upgrade later to undo the cancel before the period ends. Does not count against the meter. |
| Plan | Price | Limit |
|---|---|---|
| Free | $0 | 100 tool calls / month |
| Proper user | $9/mo · $90/yr | Unlimited |
Pro covers this Adafruit IO server only. Subscribe with adafruitio_upgrade (it returns a Stripe Checkout link). Cancel any time with adafruitio_cancel_subscription: Pro continues to the end of the paid period, with no refund for the current period, and running adafruitio_upgrade before then undoes the cancel. Or write to [email protected].
No. usefulapi is an independent service. It is not affiliated with or endorsed by Adafruit IO. The server calls the Adafruit IO API with your own Adafruit IO access, so it sees only the data that your account can see.
The login page asks for your Adafruit IO username and Adafruit IO key (AIO key). See Before you connect for where to find them.
No. Add only the URL. Do not add an Authorization header or an API key to the client config. The server signs you in with OAuth: the login page asks for your Adafruit IO username and Adafruit IO key (AIO key). If the config has such a header, remove it: some clients then send that header instead of the login token, and every call fails with 401.
The login stores them encrypted in the authorization grant of your connection. The server uses them to call the Adafruit IO API for you and to derive a private account id for usage metering. usefulapi does not show them on any page or in any reply. To stop all access, remove the connector and change or delete these credentials in Adafruit IO.
Yes, if you approve it. 2 of the 17 Adafruit IO tools can create or change data. The other 15 are marked read-only. Most MCP clients ask you to approve a tool call before it runs.
The Free plan gives 100 tool calls / month. Pro costs $9/mo or $90/yr, with unlimited tool calls, for this Adafruit IO server only. Run adafruitio_usage_status to see how many calls you used.
Ask the AI to run adafruitio_upgrade: it returns a Stripe Checkout link. To cancel, run adafruitio_cancel_subscription. Pro continues to the end of the paid period.
Tell the AI what you wanted to do. It can send the request with adafruitio_request_feature. We store the text with the server name, the type of AI client and the tool you tried, not with your account, and read every request when we plan new tools. You can send up to 5 requests per day.
Any client that supports remote MCP servers (Streamable HTTP) with OAuth login: Claude (web and desktop), Claude Code, Cursor, VS Code, Windsurf and others.
This is a Model Context Protocol endpoint — meant to be connected from an AI client, not opened in a browser. An invalid_token response at the URL is the auth gate working as designed; clients authenticate automatically.