Machine-readable · version 1
Public JSON API
Read the directory from your own code or agent. No key and no sign-up: send a GET request and you get JSON back.
- Base URL
https://boardsandbots.com/api/v1- Format
- JSON, UTF-8. Dates are ISO 8601 in UTC.
- CORS
- Open to every origin (
Access-Control-Allow-Origin: *), so a browser page can call it. - Caching
- Responses are cached for 5 minutes. Asking more often returns the same data.
- Stability
- New fields may be added. Existing fields keep their names and meanings within v1.
Responses hold only public entries. Internal scores, our curator's notes and anything about members' accounts are never part of a response. If you show our summaries somewhere, link to the entry's url.
GET/api/v1/entries
Published entries, newest first, with the same filters as the feeds on the site.
Filters combine: an entry must match every one you send. Tag slugs come from /api/v1/tags. Paging: when there are more entries, nextCursor is set and next is the full URL of the next page with your filters kept. Keep requesting next until it is null. Unknown parameters are ignored; a tag slug that does not exist returns an empty list.
| Parameter | Values | What it does |
|---|---|---|
kind | tool, build, fail, guide, news, discussion | Only entries of this kind. |
area | tag slug, e.g. firmware | Only entries with this area tag. |
board | tag slug, e.g. esp32 | Only entries with this board tag. |
instrument | tag slug, e.g. oscilloscope | Only entries with this instrument tag. |
agent | tag slug, e.g. claude-code | Only entries with this agent tag. |
interface | tag slug, e.g. mcp | Only entries with this interface tag. |
verification | verified, evidence, claimed | Only entries at this verification level. |
sort | new (default), hot, top | new: newest first. hot: points weighed against age. top: most upvoted, then newest. |
limit | 1 to 50, default 20 | Entries per page. Larger values count as 50. |
before | a nextCursor value | Start after the last entry of the previous page. Use it with the same sort and filters. |
Example request
curl "https://boardsandbots.com/api/v1/entries?limit=1"Example response
{
"entries": [
{
"slug": "esp-mosaico-an-esp32-s31-modular-devkit-built-for-coding-agents",
"number": 247,
"catalogNumber": "BB-0247",
"url": "https://boardsandbots.com/e/esp-mosaico-an-esp32-s31-modular-devkit-built-for-coding-agents",
"shortUrl": "https://boardsandbots.com/bb/247",
"kind": "news",
"kindName": "News",
"title": "ESP-Mosaico: an ESP32-S31 modular devkit built for coding agents",
"summary": "CNX Software reported on 21 October that Espressif sells ESP-Mosaico, a modular ESP32-S31 kit with a square touchscreen, for $59 on its own store. Espressif'…",
"source": {
"url": "https://www.cnx-software.com/2026/10/21/esp-mosaico-an-esp32-s31-based-modular-development-platform-for-ai-assisted-hardware-creation/",
"platform": "blog",
"author": {
"name": "Jean-Luc Aufranc",
"handle": null,
"url": "https://www.cnx-software.com/"
},
"publishedAt": "2026-10-21T07:00:29.000Z"
},
"repo": {
"url": "https://github.com/esp-mosaico/esp-mosaico-vibe",
"stars": 52,
"license": null,
"language": "Python",
"pushedAt": "2026-10-22T06:55:27.000Z"
},
"verification": {
"level": "claimed",
"name": "Claimed",
"evidence": "News article and vendor guide with product photos; no agent session on the board shown."
},
"affiliation": null,
"featured": null,
"tags": [
{
"facet": "board",
"slug": "esp32",
"name": "ESP32",
"url": "https://boardsandbots.com/t/board/esp32"
},
{
"facet": "agent",
"slug": "claude-code",
"name": "Claude Code",
"url": "https://boardsandbots.com/t/agent/claude-code"
},
{
"facet": "agent",
"slug": "codex",
"name": "Codex",
"url": "https://boardsandbots.com/t/agent/codex"
},
{
"facet": "area",
"slug": "firmware",
"name": "Firmware & embedded",
"url": "https://boardsandbots.com/t/area/firmware"
}
],
"counts": {
"upvotes": 0,
"saves": 0,
"comments": 0
},
"publishedAt": "2026-10-21T07:00:29.000Z",
"updatedAt": "2026-10-21T07:00:29.000Z"
}
],
"nextCursor": "1792566029000~seed-esp-mosaico-an-esp32-s31-modular-devkit-built-for-coding-ag",
"next": "https://boardsandbots.com/api/v1/entries?limit=1&before=1792566029000~seed-esp-mosaico-an-esp32-s31-modular-devkit-built-for-coding-ag"
}GET/api/v1/entries/:slug
One entry with our briefing and the source's quote, if there is one.
Answers 404 when no public entry has the slug and 410 when the entry was removed (for example after a takedown request).
Example request
curl "https://boardsandbots.com/api/v1/entries/esp-mosaico-an-esp32-s31-modular-devkit-built-for-coding-agents"Example response
{
"entry": {
"slug": "esp-mosaico-an-esp32-s31-modular-devkit-built-for-coding-agents",
"number": 247,
"catalogNumber": "BB-0247",
"url": "https://boardsandbots.com/e/esp-mosaico-an-esp32-s31-modular-devkit-built-for-coding-agents",
"shortUrl": "https://boardsandbots.com/bb/247",
"kind": "news",
"kindName": "News",
"title": "ESP-Mosaico: an ESP32-S31 modular devkit built for coding agents",
"summary": "CNX Software reported on 21 October that Espressif sells ESP-Mosaico, a modular ESP32-S31 kit with a square touchscreen, for $59 on its own store. Espressif'…",
"source": {
"url": "https://www.cnx-software.com/2026/10/21/esp-mosaico-an-esp32-s31-based-modular-development-platform-for-ai-assisted-hardware-creation/",
"platform": "blog",
"author": {
"name": "Jean-Luc Aufranc",
"handle": null,
"url": "https://www.cnx-software.com/"
},
"publishedAt": "2026-10-21T07:00:29.000Z"
},
"repo": {
"url": "https://github.com/esp-mosaico/esp-mosaico-vibe",
"stars": 52,
"license": null,
"language": "Python",
"pushedAt": "2026-10-22T06:55:27.000Z"
},
"verification": {
"level": "claimed",
"name": "Claimed",
"evidence": "News article and vendor guide with product photos; no agent session on the board shown."
},
"affiliation": null,
"featured": null,
"tags": [
{
"facet": "board",
"slug": "esp32",
"name": "ESP32",
"url": "https://boardsandbots.com/t/board/esp32"
},
{
"facet": "agent",
"slug": "claude-code",
"name": "Claude Code",
"url": "https://boardsandbots.com/t/agent/claude-code"
},
{
"facet": "agent",
"slug": "codex",
"name": "Codex",
"url": "https://boardsandbots.com/t/agent/codex"
},
{
"facet": "area",
"slug": "firmware",
"name": "Firmware & embedded",
"url": "https://boardsandbots.com/t/area/firmware"
}
],
"counts": {
"upvotes": 0,
"saves": 0,
"comments": 0
},
"publishedAt": "2026-10-21T07:00:29.000Z",
"updatedAt": "2026-10-21T07:00:29.000Z",
"status": "published",
"bodyMd": "The kit pairs an ESP32-S31 core board, with 16 MB of PSRAM, a 2.16-inch 480 x 480 touchscreen, an IMU and two magnetometers, with a base board, a camera modu…",
"quote": null
}
}GET/api/v1/tags
Every tag with how many published entries carry it, grouped by facet, most used first.
The example shows the first three of the response's tags.
| Parameter | Values | What it does |
|---|---|---|
facet | area, board, instrument, agent, interface | Only the tags in this facet. |
Example request
curl "https://boardsandbots.com/api/v1/tags?facet=board"Example response
{
"tags": [
{
"facet": "board",
"facetName": "Board",
"slug": "esp32",
"name": "ESP32",
"count": 69,
"url": "https://boardsandbots.com/t/board/esp32",
"feed": "https://boardsandbots.com/t/board/esp32/feed.xml"
},
{
"facet": "board",
"facetName": "Board",
"slug": "stm32",
"name": "STM32",
"count": 23,
"url": "https://boardsandbots.com/t/board/stm32",
"feed": "https://boardsandbots.com/t/board/stm32/feed.xml"
},
{
"facet": "board",
"facetName": "Board",
"slug": "rp2040",
"name": "Raspberry Pi Pico (RP2040/RP2350)",
"count": 19,
"url": "https://boardsandbots.com/t/board/rp2040",
"feed": "https://boardsandbots.com/t/board/rp2040/feed.xml"
}
]
}MCP/mcp
A remote MCP server for AI agents. An agent can search the directory and answer questions such as "which MCP servers support a Saleae?" without scraping pages. Read-only, no key and no sign-in.
Add it to Claude Code
claude mcp add --transport http boards-and-bots https://boardsandbots.com/mcpOther clients: add a remote server with the Streamable HTTP transport and the URL https://boardsandbots.com/mcp. There is nothing to configure beyond the URL.
- Transport
- Streamable HTTP. Send each JSON-RPC message with POST; answers are single JSON objects.
GETanswers405: there is no standalone event stream. - Protocol
- 2026-07-28 (no handshake, version in each request's
_meta) and the earlier 2025-11-25, 2025-06-18, 2025-03-26 withinitialize. Stateless: no sessions. - Rate limit
- 60 requests per 60 seconds per IP address. Over that you get
429with aRetry-Afterheader. - CORS
- Open to every origin, so a browser-based client can connect.
| Tool | Arguments (? optional) | What it returns |
|---|---|---|
search_entries | querykind?limit? | Entries matching your words, best match first. For free-text questions. |
get_entry | id | One entry by catalog number (BB-0142), slug or URL, with our briefing and the source quote. |
list_tools_for | board?instrument?agent?interface?area?kind?sort?limit?cursor? | Tool entries tagged with a board, instrument, agent, interface or area. Filters combine. |
latest | kind?since?limit?cursor? | The newest entries, optionally of one kind and since a date. |
Results carry entries in the same shape as this API (the entry object), both as structuredContent and as JSON text. A value the tool cannot use (an unknown board, a limit over 50) comes back as a tool result with isError: true and a sentence saying what to change.
Example request
curl -s https://boardsandbots.com/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-11-25" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"latest","arguments":{"limit":1}}}'Example response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"kind\":null,\"since\":null,\"count\":1,\"nextCursor\":\"1792566029000~seed-esp-mosaico-an-esp32-s31-modular-devkit-built-for-coding-ag\",\"entries\":[{\"slug\":\"esp-mos…"
}
],
"structuredContent": {
"kind": null,
"since": null,
"count": 1,
"nextCursor": "1792566029000~seed-esp-mosaico-an-esp32-s31-modular-devkit-built-for-coding-ag",
"entries": [
{
"slug": "esp-mosaico-an-esp32-s31-modular-devkit-built-for-coding-agents",
"number": 247,
"catalogNumber": "BB-0247",
"url": "https://boardsandbots.com/e/esp-mosaico-an-esp32-s31-modular-devkit-built-for-coding-agents",
"shortUrl": "https://boardsandbots.com/bb/247",
"kind": "news",
"kindName": "News",
"title": "ESP-Mosaico: an ESP32-S31 modular devkit built for coding agents",
"summary": "CNX Software reported on 21 October that Espressif sells ESP-Mosaico, a modular ESP32-S31 kit with a square touchscreen, for $59 on its own store. Espressif'…",
"source": {
"url": "https://www.cnx-software.com/2026/10/21/esp-mosaico-an-esp32-s31-based-modular-development-platform-for-ai-assisted-hardware-creation/",
"platform": "blog",
"author": {
"name": "Jean-Luc Aufranc",
"handle": null,
"url": "https://www.cnx-software.com/"
},
"publishedAt": "2026-10-21T07:00:29.000Z"
},
"repo": {
"url": "https://github.com/esp-mosaico/esp-mosaico-vibe",
"stars": 52,
"license": null,
"language": "Python",
"pushedAt": "2026-10-22T06:55:27.000Z"
},
"verification": {
"level": "claimed",
"name": "Claimed",
"evidence": "News article and vendor guide with product photos; no agent session on the board shown."
},
"affiliation": null,
"featured": null,
"tags": [
{
"facet": "board",
"slug": "esp32",
"name": "ESP32",
"url": "https://boardsandbots.com/t/board/esp32"
},
{
"facet": "agent",
"slug": "claude-code",
"name": "Claude Code",
"url": "https://boardsandbots.com/t/agent/claude-code"
},
{
"facet": "agent",
"slug": "codex",
"name": "Codex",
"url": "https://boardsandbots.com/t/agent/codex"
},
{
"facet": "area",
"slug": "firmware",
"name": "Firmware & embedded",
"url": "https://boardsandbots.com/t/area/firmware"
}
],
"counts": {
"upvotes": 0,
"saves": 0,
"comments": 0
},
"publishedAt": "2026-10-21T07:00:29.000Z",
"updatedAt": "2026-10-21T07:00:29.000Z"
}
]
},
"isError": false
}
}The entry object
Lists return entries in this shape; the single-entry endpoint adds status, bodyMd and quote.
| Field | Type | Meaning |
|---|---|---|
slug | string | Stable id. Never changes after publish. |
numbercatalogNumber | number, string | Catalog number (142) and how we print it (BB-0142). |
urlshortUrl | string | The entry page and its short link (/bb/142). |
kindkindName | string | One of tool, build, fail, guide, news, discussion, and its display name. |
title | string | Our title for the entry. |
summary | string | Our summary, at most 60 words. Never the author's text. |
source | object | url, platform (github, youtube, blog ...), author { name, handle, url } or null, publishedAt. |
repo | object or null | url, stars, license, language, pushedAt for entries with a code repository. |
verification | object | level (verified, evidence, claimed), name, and evidence: our note on what we saw. |
affiliation | object or null | kind (team, sponsored) and label, when the entry is about something we make or a sponsor paid for. |
featured | string or null | pick or build-of-the-week. |
tags | array | { facet, slug, name, url } for each tag. |
counts | object | upvotes, saves, comments. |
publishedAtupdatedAt | string | ISO 8601, UTC. |
status | string | Entry endpoint only: published, or archived (outdated, kept so links work). |
bodyMd | string or null | Entry endpoint only: our briefing, or the member's post, as Markdown. Sanitize it before you render it as HTML. |
quote | string or null | Entry endpoint only: a quote from the source, 25 words at most; credit source.author when you show it. |
Errors
Errors use the HTTP status (400 for a bad parameter, 404 not found, 410 removed) and a JSON body with a machine-readable error, a sentence in message, and for 400 the parameters that were wrong:
{
"error": "bad_request",
"message": "One or more query parameters are not valid. See /api for the accepted values.",
"issues": [
{
"param": "kind",
"message": "Invalid option: expected one of \"tool\"|\"build\"|\"fail\"|\"guide\"|\"news\"|\"discussion\""
}
]
}Feeds, sitemap and llms.txt
RSS 2.0 feeds carry the newest 50 entries with our summaries, refreshed every few minutes.
/feed.xmlEvery kind./feed/tools.xmlTools only./feed/builds.xmlBuilds only./feed/magic-smoke.xmlMagic Smoke only./feed/guides.xmlGuides only./feed/news.xmlNews only./feed/discuss.xmlDiscussions only./t/:facet/:slug/feed.xmlOne tag, for example/t/board/esp32/feed.xml./llms.txtWhat this site is and how to read it, written for language models./sitemap-index.xmlEvery public page, for crawlers.