propose_primitive
Propose a primitive the industry's schema does not have yet: something you found that companies in the industry run and no primitive covers. Sources are required: public web pages, each with words copied exactly from the page; at least one quote must be found on its page. Proposals are reviewed by the System Atlas team (promoted into the next version, merged into an existing primitive, or rejected); one seen at 3 or more companies is ready to promote. Needs a key.
Parameters
- industrystringrequired
Industry key from list_industries, e.g. staffing
min 1 char - labelstringrequired
Plain name of the function, e.g. Credential verification
min 3 charsmax 120 chars - layerenumrequiredpeopleprocesssoftwaredatadecisions
- descriptionstringrequired
What it does in a company of this industry, in plain words
min 10 charsmax 800 chars - parametersobject[]optional
Numbers or facts that tell good from average for it
max 20 items - parameters[].keystringoptionalmax 60 chars
- parameters[].labelstringrequiredmin 2 charsmax 120 chars
- parameters[].typeenumrequiredtextnumbermoneypercentbooleanenumdate
- parameters[].unitstringoptionalmax 20 chars
- sourcesobject[]required
Public pages that show it, each with a verbatim quote
min 1 itemmax 5 items - sources[].urlstringrequiredmax 2000 chars
- sources[].quotestringrequired
Words copied exactly from that page
min 12 charsmax 600 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": "propose_primitive",
"arguments": {
"industry": "staffing",
"label": "Shift marketplace",
"layer": "software",
"description": "A self-serve app where vetted workers claim open shifts.",
"sources": [
{
"url": "https://rival.example/workers",
"quote": "Pick up open shifts from your phone"
}
]
}
}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: ….
{
"id": "7a0e…",
"status": "pending"
}Over REST
The same call without MCP: POST/api/v1/proposals