Find and compare headless apps (CLI, MCP, API) for agents, with sources, lessons and changes.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
This content is sent to the headlesson operator. Feedback about headlesson itself is sufficient. Do not include personal information or conversation contents.
Feedback to the headlesson operator, 1–2000 Unicode characters; exclude personal information and conversation text.
Report type: comment, worked, failed, missing or tip; receipt does not verify the claim.
Optional record ID that the feedback concerns; feedback about headlesson itself needs no product ID.
Optional model name associated with the report, without conversation content.
Optional client name only; do not include full User-Agent, account IDs or credentials.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
This content is sent to the headlesson operator. Feedback about headlesson itself is sufficient. Do not include personal information or conversation contents.
| Argument | Type | Description |
|---|---|---|
| kind | string | Report type: comment, worked, failed, missing or tip; receipt does not verify the claim. |
| text* | string | Feedback to the headlesson operator, 1–2000 Unicode characters; exclude personal information and conversation text. |
| about | string | Optional record ID that the feedback concerns; feedback about headlesson itself needs no product ID. |
| model | string | Optional model name associated with the report, without conversation content. |
| client | string | Optional client name only; do not include full User-Agent, account IDs or credentials. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"text"
],
"properties": {
"kind": {
"enum": [
"comment",
"worked",
"failed",
"missing",
"tip"
],
"type": "string",
"default": "comment",
"examples": [
"missing"
],
"description": "Report type: comment, worked, failed, missing or tip; receipt does not verify the claim."
},
"text": {
"type": "string",
"examples": [
"The lesson needs a clearer owner-login prerequisite."
],
"maxLength": 2000,
"minLength": 1,
"description": "Feedback to the headlesson operator, 1–2000 Unicode characters; exclude personal information and conversation text."
},
"about": {
"type": "string",
"examples": [
"app:postiz"
],
"description": "Optional record ID that the feedback concerns; feedback about headlesson itself needs no product ID."
},
"model": {
"type": "string",
"examples": [
"model-name"
],
"description": "Optional model name associated with the report, without conversation content."
},
"client": {
"type": "string",
"examples": [
"MCP Inspector"
],
"description": "Optional client name only; do not include full User-Agent, account IDs or credentials."
}
},
"additionalProperties": false
}Get one record by an ID from headlesson_search: an app, usecase, feature, concept or change. For an app, sections ["lesson","gotchas"] return the install, check and first-task steps with the recorded test result (a dated observation by the headlesson operator) and known failure conditions; "relations" lists alternatives and what it wraps or depends on; "axes" returns every compared fact. Without sections you get the description, interfaces and six main axes. Each fact carries its source and check date; private sources appear as labels, not links. Official MCP Registry listing IDs are fetched live and are unverified; a failed lookup does not prove the ID absent.
| Argument | Type | Description |
|---|---|---|
| id* | string | Record ID or the special axes/search-guide ID; missing records return nearby ID suggestions. |
| sections | array | App sections to return in text and structuredContent; omitted means description, interfaces and six major axes. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"examples": [
"app:postiz",
"feature:since-2025",
"axes",
"search-guide"
],
"minLength": 1,
"description": "Record ID or the special axes/search-guide ID; missing records return nearby ID suggestions."
},
"sections": {
"type": "array",
"items": {
"enum": [
"lesson",
"relations",
"gotchas",
"changes",
"axes"
],
"type": "string"
},
"examples": [
[
"lesson",
"gotchas"
],
[
"axes",
"relations",
"changes"
]
],
"description": "App sections to return in text and structuredContent; omitted means description, interfaces and six major axes."
}
},
"additionalProperties": false
}Find command-line tools, MCP servers and APIs for a task, and compare them. Ask in plain English or Japanese ("extract text from scanned PDFs") or by product name. Each result gives an ID, a one-line reason it matches, and when it was checked. Pass the ID to headlesson_get with sections ["lesson","gotchas"] to get the steps (install, check, first task) with their recorded test result (most were run by an agent; a few are untested) and known failure conditions, such as a tool that exits 0 with empty or wrong output. Filter or compare with axes such as auth, pricing, license and remote_mcp (where, axes, ids). Curated records come first. If none match, or include:["registry"] is set, one public word from the query is looked up in the Official MCP Registry; those listings are unverified (what is sent is described on the query field).
| Argument | Type | Description |
|---|---|---|
| ids | array | Up to 20 explicit app IDs to compare; any missing ID produces an error instead of being silently omitted. |
| axes | array | Axes to compare: auth, pricing, license, cli, local_mcp, remote_mcp are useful starting points; licence is normalized to license. |
| sort | object | Optional axis ordering before relevance; unknown values remain last. |
| limit | integer | Maximum app results, from 1 to 20; default is 5. |
| query | string | Task or product name in English or Japanese. External Registry lookup sends only one ASCII public name fragment (longest significant ASCII word from free text, or a supplied namespace; max 200 chars) when curated matches are absent or include registry is requested; the full free text is not sent. Recognized credential/URL/PII patterns are skipped; this is not a complete secret filter. Do not include secrets. |
List dated changes in agent tools and standards (new tools, renames, deprecations, breaking changes, new standards) since a date, optionally by kind or affected record. Useful for checking what changed after your training data. Public source URLs are kept; private sources appear as labels.
| Argument | Type | Description |
|---|---|---|
| about | string | Affected record ID to filter changes, such as an app or protocol. |
| kinds | array | Change kinds to include; the array is an OR-list. |
| limit | integer | Maximum changes, from 1 to 100; default is 20. |
| since | string | Inclusive event-date lower bound in YYYY-MM-DD; omitted uses the previous 90 days, not source confirmation dates. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"about": {
"type": "string",
"examples": [
"proto:mcp"
],
"description": "Affected record ID to filter changes, such as an app or protocol."
},
"kinds": {
"type": "array",
"items": {
"enum": [
"new",
"rename",
"deprecation",
"breaking",
"standard",
"acquisition"
],
"type": "string"
},
"examples": [
[
"breaking",
"deprecation"
]
],
"description": "Change kinds to include; the array is an OR-list."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"examples": [
20
],
"description": "Maximum changes, from 1 to 100; default is 20."
},
"since": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$",
"examples": [
"2026-01-01"
],
"description": "Inclusive event-date lower bound in YYYY-MM-DD; omitted uses the previous 90 days, not source confirmation dates."
}
},
"additionalProperties": false
}| where | object | Confirmed axis filters: AND across axes, OR inside a value array; known spelling aliases are normalized. |
| include | array | Explicitly request the supplemental Official Registry name lookup alongside curated results. Otherwise it is attempted only when curated matches are absent. At most five unverified listings; one-page comparison only. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string"
},
"examples": [
[
"app:postiz",
"app:typefully"
]
],
"maxItems": 20,
"description": "Up to 20 explicit app IDs to compare; any missing ID produces an error instead of being silently omitted."
},
"axes": {
"type": "array",
"items": {
"type": "string"
},
"examples": [
[
"auth",
"pricing",
"remote_mcp"
],
[
"licence"
]
],
"description": "Axes to compare: auth, pricing, license, cli, local_mcp, remote_mcp are useful starting points; licence is normalized to license."
},
"sort": {
"type": "object",
"examples": [
{
"axis": "last_release",
"order": "desc"
}
],
"required": [
"axis",
"order"
],
"properties": {
"axis": {
"type": "string",
"examples": [
"last_release",
"pricing"
],
"description": "Axis used for ordering; spelling aliases such as licence are normalized."
},
"order": {
"enum": [
"asc",
"desc"
],
"type": "string",
"examples": [
"desc"
],
"description": "Ascending or descending order; unknown is last in either direction."
}
},
"description": "Optional axis ordering before relevance; unknown values remain last.",
"additionalProperties": false
},
"limit": {
"type": "integer",
"default": 5,
"maximum": 20,
"minimum": 1,
"examples": [
5
],
"description": "Maximum app results, from 1 to 20; default is 5."
},
"query": {
"type": "string",
"examples": [
"schedule social media posts",
"SNS に予約投稿したい",
"Postiz"
],
"description": "Task or product name in English or Japanese. External Registry lookup sends only one ASCII public name fragment (longest significant ASCII word from free text, or a supplied namespace; max 200 chars) when curated matches are absent or include registry is requested; the full free text is not sent. Recognized credential/URL/PII patterns are skipped; this is not a complete secret filter. Do not include secrets."
},
"where": {
"type": "object",
"examples": [
{
"pricing": [
"paid",
"freemium"
],
"remote_mcp": true
}
],
"description": "Confirmed axis filters: AND across axes, OR inside a value array; known spelling aliases are normalized.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "array",
"items": {
"type": [
"string",
"boolean",
"number"
]
},
"minItems": 1
}
],
"examples": [
true,
[
"paid",
"freemium"
]
],
"description": "One confirmed value or an OR-list for an axis; unknown is never a confirmed match."
}
},
"include": {
"type": "array",
"items": {
"type": "string",
"const": "registry"
},
"examples": [
[
"registry"
]
],
"description": "Explicitly request the supplemental Official Registry name lookup alongside curated results. Otherwise it is attempted only when curated matches are absent. At most five unverified listings; one-page comparison only."
}
},
"additionalProperties": false
}