registry_upsert_flows
Admin: up to 200 public flows between a registry organization's components (by clientId, label or id), with flow type, confidence and an optional open-web source. The same flow again updates it. Needs an admin key.
Parameters
- organizationstringrequired
The organization's domain or website, as given to registry_upsert_organization
min 3 charsmax 300 chars - flowsobject[]requiredmin 1 itemmax 200 items
- flows[].fromstringrequired
Component id, clientId or label
min 1 charmax 200 chars - flows[].tostringrequiredmin 1 charmax 200 chars
- flows[].flowTypeenumrequiredmoneyinformationmaterialworkenergycontrol
- flows[].labelstringoptionalmax 200 chars
- flows[].directionenumoptionaldefault "one_way"one_waytwo_way
- flows[].confidenceenumoptionaldefault "high"
How sure the public evidence makes it: high (stated plainly) or low (implied)
highlow - flows[].sourceobjectoptional
- flows[].source.urlstringrequired
Public web address the finding rests on
min 1 charmax 500 chars - flows[].source.kindenumoptionaldefault "website"websitecareersjob_postpressreviewfilingregistry
- flows[].source.titlestringoptionalmax 200 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": "registry_upsert_flows",
"arguments": {
"organization": "acmebuilders.example",
"flows": [
{
"from": "estimating",
"to": "project-management",
"flowType": "information",
"label": "approved budget"
}
]
}
}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: ….
{
"organization": {
"domain": "acmebuilders.example"
},
"results": [
{
"from": "estimating",
"to": "project-management",
"edgeId": "4b1e…",
"created": true
}
]
}Over REST
The same call without MCP: POST/api/v1/admin/registry/flows