What this is
Where an agent gets stuck connecting to a SaaS is often not yet written in the official docs — it lives only in the memory of the agent that got stuck. This series copies only what a human allowed out of that memory into fixed fields and publishes it. Not a rating, not a ranking: a record of what happened in the field.
· Fifteen fixed fields and nothing else. Tenant identifiers, tokens, amounts, tenant URLs and personal names have no field, so they cannot appear.
·
lived (from real work) and synthetic (measured with a sealed question) are labelled and never mixed.· One note is one observer. Counts carry denominators; no rates. No rankings, scores or comparisons between SaaS.
· No blame. Facts, and how a human resolved it.
· Observer:
human:synapse-arrows (the person who read the record and allowed publication).Issue 1: two notes from freee's official MCP server (lived)
Both were seen by our own agent (Claude Code) doing real work on our own freee account. The cause of the second one was a configuration gap on our side, not a freee problem.
AWT-001 (lived) — freee-mcp refuses calls for any company other than the "current company"
| kind | lived |
|---|---|
| observer | human:synapse-arrows |
| observed_on | 2026-09-24 (reproduced daily through 2026-10-01) |
| service | freee (catalog service_id: freee) |
| component | freee-mcp 0.26.5 (freee's official MCP server, npm) |
| agent_runtime | Claude Code |
| task | Count the deals of a specified company for a given month through the API |
| organ_stopped | connect |
| symptom_class | wrong_target |
| what_the_agent_saw | Passing a company_id other than the current company to freee_api_get is refused with an error that tells the agent to switch with freee_set_current_company |
| what_was_true | freee-mcp persists a "current company" in its config file and does not pass calls for any other company. There are two company identifiers (the 8-digit API id and the 10-digit company number). The output of freee_list_companies is formatted text, not JSON |
| how_resolved | Switch first with freee_set_current_company, switch back when done. Use the API id for switching |
| human_step_required | no |
| reproducible / times_seen | yes · 7+ (daily observation) |
| truth_anchor | Self-reported, one observer. Private record: readings of marker M-001 (Synapse Arrows) |
AWT-002 (lived) — Authentication succeeds, but the invoice API is refused for a missing permission (our own app registration)
| kind | lived |
|---|---|
| observer | human:synapse-arrows |
| observed_on | 2026-09-20 |
| service | freee (catalog service_id: freee) |
| component | freee-mcp (0.26.x) + our own freee app (OAuth registration) |
| agent_runtime | Claude Code |
| task | Read the latest 5 invoices of our own company |
| organ_stopped | connect |
| symptom_class | permission_missing |
| what_the_agent_saw | Authentication passes and the company is visible, yet only the invoice API is refused with a permission error — 5 attempts, 5 refusals |
| what_was_true | The connected freee app (OAuth registration) did not carry the invoice permission. Not a token-expiry or endpoint problem. Diagnosable from the error text. A configuration gap on our side, not a freee problem |
| how_resolved | unresolved (at the time). A human must grant the invoice permission in the app settings and re-consent. The agent cannot fix it |
| human_step_required | yes: grant the permission on the app and re-consent |
| reproducible / times_seen | yes · 5 |
| truth_anchor | Self-reported, one observer. Private record: LedgerLoop_2026-09-20 (Synapse Arrows) |
What the fields mean
| organ_stopped | Where the agent stopped. discover (find the service or its official entry point) / understand (grasp how to connect and authenticate) / connect (authentication and calls actually go through) / complete (finish the task). |
|---|---|
| symptom_class | Closed vocabulary: permission_missing / wrong_target / wrong_method / not_found / format / token_expired / rate_limit / other |
| truth_anchor | What backs the record. lived: "self-reported, one observer" plus the name of the private record. synthetic: the fingerprint of the answer sealed before measuring, and the fingerprint of the pre-registered counting plan. |
What comes next
Next we add one synthetic note (a record measured daily with a sealed question). We also count whether this page is cited by AI answers, using our daily observations, and publish that number too.
Publication is decided note by note by a human. Corrections: see Principles of Independence.