System Atlas

submit_signal

Confirm, flag as wrong or correct one public finding on a registry organization, as the key's user (docs/verification.md). finding is a handle from get_organization (comp:<id>, val:<id>, flow:<id>, or link:<relation>:<other ref> from node=sec:links). confirm: it matches its source. flag: it is wrong, with a reason. correct: what it should say with source_url, a public page that states it (loaded and checked); it becomes a draft in the review queue and never overwrites the finding. withdraw takes your signal back. One signal per person per finding (sending again changes it); needs a verified email; 20 an hour. Weight follows the signer: the organization's verified owner 3, a track record 1.5, a member 1, accounts under 7 days 0.25; one per network counts. Returns the finding's new state and counts.

Write · editor keyMCP tool

Parameters

  • refstringrequired

    The organization's registry ref, e.g. acme-builders-3f2a9c1d

    max 200 chars
  • findingstringrequired

    The finding, as get_organization names it: comp:<id>, val:<id> or flow:<id> (the 8-character handle or the full id), or link:<relation>:<other org ref> with relation funded_by, funds, parents or subsidiaries

    max 200 chars
  • kindenumrequired

    confirm: it matches its source. flag: it is wrong (reason required). correct: what it should say, with a public page that states it (source_url and correction required). withdraw: take your signal back.

    confirmflagcorrectwithdraw
  • reasonstringoptional

    Why it is wrong (flag)

    max 500 chars
  • source_urlstringoptional

    A public page that states the correction (correct)

    max 2000 chars
  • correctionstringoptional

    What the finding should say (correct)

    max 500 chars

Example call

Agents call tools by name; you rarely write this by hand. It is here so you can test the server from a shell or your own code.

{
  "name": "submit_signal",
  "arguments": {
    "ref": "acme-builders-3f2a9c1d",
    "finding": "comp:3f2a9c1d",
    "kind": "flag",
    "reason": "Their careers page now lists Salesforce"
  }
}

Response

The result is one text content block holding this JSON (abbreviated here). Errors come back with isError: true and a message such as Error 401: … or Invalid input: ….

Response
{
  "finding": "component:3f2a9c1d-…",
  "kind": "flag",
  "role": "member",
  "weight": 1,
  "state": "contested",
  "counts": {
    "confirmations": 1,
    "flags": 2,
    "corrections": 0
  },
  "contribution": null
}

Over REST

The same call without MCP: POST/api/v1/signals