Skip to content

MCP tools

Here is every tool the Area O1 MCP server offers: its parameters, what it returns, and an example.

The examples use made-up data for a made-up person, Maya Chen. Results are trimmed (...) to keep them short. Dates are YYYY-MM-DD; times are UTC.

Tool Parameters Writes?
get_scoreboard none no
list_gaps none no
query_claims entity, as_of (optional) no
get_provenance claim_id no
what_changed since no
run_preflight min_severity (optional) no
propose_context text, title, topic, client (all but text optional) adds a note to the Inbox

The read tools are marked read-only to the client. They score the case in memory and never change a workspace file. The only thing they may touch is the disposable search index under .areao1/cache/.

get_scoreboard

The scoreboard for your active profile (O-1A or EB-1A): each criterion's status, how many exhibits count, and which strength signals they show. It's the same rule-based count as the Overview page; see Invited vs completed for how it works.

Parameters: none.

Returns:

Field Meaning
profile, profile_name The active profile, e.g. o1a.
banked, building How many criteria are banked, and how many are building.
threshold, target The profile's threshold and target (O-1A: 3 and 5).
criteria[] Per criterion: id, label, status (banked, building, gap or dropped), exhibits_counted, in_progress, matched_signals, reason.
note A reminder that this is a rule-based status, not legal advice.

Example result:

{
  "profile": "o1a",
  "profile_name": "O-1A Extraordinary Ability",
  "banked": 1,
  "building": 2,
  "threshold": 3,
  "target": 5,
  "criteria": [
    {
      "id": "judging",
      "label": "Judging the work of others",
      "status": "building",
      "exhibits_counted": 1,
      "in_progress": 1,
      "matched_signals": ["selective_event"],
      "reason": "Needs 1 more exhibit. 1 exhibit not counted until completed (stage: invited)."
    },
    ...
  ],
  "note": "Rule-based status from accepted exhibits. Not legal advice and not affiliated with USCIS; confirm strategy with an immigration attorney."
}

list_gaps

Every criterion that isn't banked or dropped, with exactly what's missing and what's already in flight.

Parameters: none.

Returns:

Field Meaning
profile, banked, threshold As in get_scoreboard.
still_needed_to_reach_threshold How many more criteria would need to be banked to reach the profile's threshold.
gaps[] Per criterion: id, label, status, needs_exhibits, needs_signals, missing_signals (as labels), accepted_evidence_types, in_progress (exhibits filed but not at a completed stage), pending_in_inbox (evidence waiting for your review), reason.
note The same not-legal-advice note.

Example result:

{
  "profile": "o1a",
  "banked": 1,
  "threshold": 3,
  "still_needed_to_reach_threshold": 2,
  "gaps": [
    {
      "id": "judging",
      "label": "Judging the work of others",
      "status": "building",
      "needs_exhibits": 1,
      "needs_signals": 0,
      "missing_signals": ["multiple instances", "documented scoring"],
      "accepted_evidence_types": ["judge_invite", "reviewer_record", "panel_letter", "program_committee"],
      "in_progress": [
        {"id": "exh_4b1e09c2a7d3", "title": "Judge invitation, Northwind Hacks 2026", "stage": "invited"}
      ],
      "pending_in_inbox": [
        {"id": "cand_91c0d4e2b8aa", "title": "Reviewer for the Example ML Workshop"}
      ],
      "reason": "Needs 1 more exhibit. 1 exhibit not counted until completed (stage: invited)."
    },
    ...
  ],
  "note": "..."
}

query_claims

The facts Area O1 holds about one thing: a repo, a model, a paper, a person, an event. Each fact is a claim that quotes its source word for word. See Claims and provenance.

Parameters:

Name Type Meaning
entity string, required An entity id such as artifact:github:mayachen/fastgrad, or part of an id or name such as fastgrad (not case-sensitive).
as_of string, optional A date, YYYY-MM-DD. Returns what was true by that day and already known to Area O1 by the end of that day. Without it, you get the current claims.

Returns:

Field Meaning
entity What you asked for.
matched_entities The entity ids that matched.
as_of The date used, or null.
claims[] Per claim: id, subject, predicate, value, stage, valid_from, recorded_at, status (proposed, corroborated, approved or rejected), current (nothing newer replaced it), confidence (high, medium, low), excerpt (the exact source words), source_url.
rule A reminder: draft only from claims with status approved.

Example call:

{"entity": "fastgrad"}

Example result:

{
  "entity": "fastgrad",
  "matched_entities": ["artifact:github:mayachen/fastgrad"],
  "as_of": null,
  "claims": [
    {
      "id": "clm_1ee3c3af9dcb",
      "subject": "artifact:github:mayachen/fastgrad",
      "predicate": "stars",
      "value": 1340,
      "stage": null,
      "valid_from": "2026-10-08",
      "recorded_at": "2026-10-08T13:48:00+00:00",
      "status": "approved",
      "current": true,
      "confidence": "high",
      "excerpt": "\"stargazers_count\": 1340",
      "source_url": "https://api.github.com/repos/mayachen/fastgrad"
    }
  ],
  "rule": "Draft only from claims with status 'approved'; say what is unknown instead of filling gaps."
}

With {"entity": "fastgrad", "as_of": "2026-09-01"} you'd get the star count Area O1 knew on September 1 instead.

get_provenance

The full trail behind one claim, down to the saved copy of the source.

Parameters:

Name Type Meaning
claim_id string, required A claim id from query_claims or what_changed, e.g. clm_1ee3c3af9dcb.

Returns:

Field Meaning
claim The claim, in the same shape as in query_claims.
extracted_by Who read it: kind (connector, model or user), name, version.
excerpt_offsets [start, end]: where the excerpt sits in the saved source.
excerpt_verified true when the saved source still has exactly those words at those offsets.
observation The saved source: id, connector, source_url, captured_at, sha256, snapshot (path under memory/sources/), media_type, tier, filename.
entity What the claim is about: id, kind, name, url.
reviews Your decisions on it: decision (approved or rejected), reviewer, at, rationale.
supersedes, superseded_by Earlier and later versions (id, value, valid_from).
cited_by Exhibits that rely on it (exhibit_id, title, file).
prov The same chain in W3C PROV terms: entity, activity, agent, wasDerivedFrom.

Example call:

{"claim_id": "clm_1ee3c3af9dcb"}

Example result:

{
  "claim": {"id": "clm_1ee3c3af9dcb", "predicate": "stars", "value": 1340, "status": "approved", "current": true, ...},
  "extracted_by": {"kind": "connector", "name": "github", "version": ""},
  "excerpt_offsets": [40, 64],
  "excerpt_verified": true,
  "observation": {
    "id": "obs_0e3f60955496f6dd",
    "connector": "github",
    "source_url": "https://api.github.com/repos/mayachen/fastgrad",
    "captured_at": "2026-10-08T13:48:00Z",
    "sha256": "43fa0fbf...",
    "snapshot": "memory/sources/43fa0fbf....json",
    "media_type": "application/json",
    "tier": "platform",
    "filename": null
  },
  "entity": {"id": "artifact:github:mayachen/fastgrad", "kind": "artifact", "name": "mayachen/fastgrad", ...},
  "reviews": [
    {"id": "dec_139aef4ffc8c", "decision": "approved", "reviewer": "user", "at": "2026-10-08T13:48:00Z",
     "rationale": "accepted in the Inbox", ...}
  ],
  "supersedes": [{"id": "clm_53815768619b", "value": 1200, "valid_from": "2026-09-14"}],
  "superseded_by": [],
  "cited_by": [],
  "prov": {
    "entity": "obs_0e3f60955496f6dd",
    "activity": "extraction",
    "agent": "connector:github",
    "wasDerivedFrom": "obs_0e3f60955496f6dd"
  }
}

An unknown id fails with no claim '<id>'.

what_changed

Everything recorded on or after a date. A good way to start a session where the last one ended.

Parameters:

Name Type Meaning
since string, required A date, YYYY-MM-DD.

Returns:

Field Meaning
since The date used.
claims[] New claims: id, subject, predicate, value, previous_value, change (new or updated).
reviews[] Your approve and reject decisions in that time.
exhibits_accepted[] Exhibits you accepted: id, criterion, title, stage.
new_candidates[] New Inbox items that you haven't rejected: id, kind, title, proposed_criterion.
metric_changes[] Metrics that moved: source, item, metric, from, to, delta.

Example call:

{"since": "2026-10-01"}

Example result:

{
  "since": "2026-10-01",
  "claims": [
    {"id": "clm_1ee3c3af9dcb", "subject": "artifact:github:mayachen/fastgrad", "predicate": "stars",
     "value": 1340, "previous_value": 1200, "change": "updated"}
  ],
  "reviews": [{"claim_id": "clm_1ee3c3af9dcb", "decision": "approved", "at": "2026-10-08T13:48:00Z", ...}],
  "exhibits_accepted": [
    {"id": "exh_7f20c1d9e4b5", "criterion": "original_contributions", "title": "fastgrad on GitHub", "stage": null}
  ],
  "new_candidates": [
    {"id": "cand_2b276d24a192", "kind": "context", "title": "Asked to judge Northwind Hacks on Nov 8",
     "proposed_criterion": ""}
  ],
  "metric_changes": [
    {"source": "github", "item": "mayachen/fastgrad", "metric": "stars", "from": 1200, "to": 1340, "delta": 140}
  ]
}

A date that isn't YYYY-MM-DD fails with a message saying so.

run_preflight

Runs evidence preflight now: what a reviewer would notice (outdated or unsupported values cited, facts that disagree, metrics that differ, invitations without completed proof, captures without a primary copy, undated exhibits). It's read-only: the issues are computed fresh and nothing is saved, not even data/preflight.json. Only Run preflight on Evidence and areao1 preflight save the report.

Parameters:

Name Type Meaning
min_severity string, optional high, medium or low (the default, every issue). Keeps issues at or above it.

Returns:

Field Meaning
summary One line, such as "Preflight: 3 open issues (1 high, 2 medium, 0 low) across 12 exhibits and 40 claims".
counts Open issues by severity.
issues[] Each open issue: id, kind, severity, title, detail and refs (the claims, exhibits, letters or drafts involved, with links). Dismissed issues are left out. At most 100.
more How many more matched beyond the first 100.

Severity says how noticeable an issue is to a reader. It says nothing about approval.

Example call:

{"min_severity": "high"}

propose_context

Sends a note to your Inbox, under "Context from your AI tools". This is the only tool that writes anything.

Parameters:

Name Type Meaning
text string, required The note, up to 4,000 characters. Facts in your words, not the agent's conclusions.
title string, optional A short title. Without one, the first line of text is used (up to 120 characters).
topic string, optional A word or two, such as judging or letters.
client string, optional The tool sending it, e.g. Claude Code. Shown as the note's source.

Returns: status (proposed or duplicate), plus candidate_id, tier (always self_reported) and a note when it was added.

Example call:

{
  "text": "Asked to judge Northwind Hacks on Nov 8. The invitation came from the organizers at northwindhacks.example.org.",
  "title": "Asked to judge Northwind Hacks on Nov 8",
  "topic": "judging",
  "client": "Claude Code"
}

Example result:

{
  "status": "proposed",
  "candidate_id": "cand_2b276d24a192",
  "tier": "self_reported",
  "note": "Sent to the Inbox for review. It won't count toward any criterion."
}

Sending the exact same text again returns {"status": "duplicate", "note": "That context is already in the Inbox."} and adds nothing. Empty text, or text over 4,000 characters, fails with a message.

In the Inbox you can Keep as a note, Edit, Snooze 7d or Dismiss. A kept note is saved in memory as a self-reported observation. It never becomes evidence and never counts toward a criterion. To turn an invitation into evidence, add the real document (the email or letter) through the Inbox or a connector.

Example prompts

Things to ask your agent once it's connected:

  • "What changed in my Area O1 case since last Monday?"
  • "Show my scoreboard. Which criteria are closest to banked?"
  • "What does the judging criterion still need? List what's in progress."
  • "What do we know about fastgrad? Quote the sources."
  • "Where does the 1,340 stars figure come from? Check the provenance."
  • "How many stars did fastgrad have on 2026-09-01, as far as Area O1 knew then?"
  • "Draft a paragraph about my open-source work using only approved claims. Mark anything unknown."
  • "I just got invited to review for a workshop on Dec 3. Save that to my Inbox."

Your agent is told not to give eligibility verdicts. If you ask "do I qualify?", expect it to describe what's banked and what's missing, and to point you to an immigration attorney for the judgment.