Willder documentation
MCP tools reference.
Choose a tool, supply its arguments and check the result. The examples below show the params object for a tools/call request.
Read tools require read permission or higher. Write tools require write permission or higher. Scope and token validity are checked when a tool runs. Examples with placeholder IDs need real, authorized IDs before use. Write examples change data.
memory_query
Find facts relevant to a question. Requires read.
- query (required)
- String. A focused question in plain language.
- limit (optional)
- Optional integer from 1 to 50. Defaults to 10.
- scopePath (optional)
- Optional string. Copy an existing scope path from Access. Defaults to the token scope.
{
"name": "memory_query",
"arguments": {
"query": "What is the agreed launch date for Project Atlas?",
"limit": 5
}
}Result: Text bullets containing facts and, when available, validity dates. An empty result says ‘No facts found.’ This tool currently returns no fact UUIDs or source citation records.
memory_entity
Read a known entity and its facts. Requires read.
- entityId (required)
- String. The ID of an existing entity you are authorized to access.
- scopePath (optional)
- Optional string. Copy an existing scope path from Access. Defaults to the token scope.
{
"name": "memory_entity",
"arguments": {
"entityId": "replace_with_entity_id"
}
}Result: Text with the entity name, type, optional summary and facts, or ‘Entity not found.’ The tool does not search for IDs by name.
memory_ingest
Add a note to shared memory. Requires write.
- content (required)
- Nonempty string. The note or observation to store.
- name (required)
- Nonempty string. A name for the subject of the note.
- scopePath (optional)
- Optional string. Copy an existing scope path from Access. Defaults to the token scope.
{
"name": "memory_ingest",
"arguments": {
"name": "Project Atlas",
"content": "Example only: the team agreed to launch Project Atlas on 15 October 2026."
}
}Result: ‘Stored. Queued for ingest — will appear in memory shortly.’ This confirms queue acceptance. It does not confirm that extraction finished or that the note is searchable. Avoid duplicate writes while waiting.
fact_link_source
Associate a known fact with a code source. Requires write.
- graphitiFactUuid (required)
- Nonempty string after trimming. An existing fact UUID.
- sourceType (required)
- One of: pr, commit, file.
- sourceRef (required)
- Nonempty string after trimming. The source reference.
- recordedRevision (optional)
- Optional string, nonempty after trimming. The revision recorded with the source.
- scopePath (optional)
- Optional string. Copy an existing scope path from Access. Defaults to the token scope.
{
"name": "fact_link_source",
"arguments": {
"graphitiFactUuid": "replace_with_fact_uuid",
"sourceType": "file",
"sourceRef": "docs/launch.md",
"recordedRevision": "replace_with_commit_sha"
}
}Result: Text confirming the link. This records provenance for staleness checks; it does not synchronize the source or edit the fact. You need a known fact UUID: memory_query and memory_entity do not currently return one.
get_my_brief
Read a generated brief. Requires read.
- briefId (optional)
- Optional string. The ID of an existing brief.
- scopePath (optional)
- Optional string. Copy an existing scope path from Access. Defaults to the token scope.
{
"name": "get_my_brief",
"arguments": {}
}Result: Markdown containing the title, scope, summary and sections, with a recipient or Google Doc link when present. Without briefId, returns the latest brief at the selected scope, or ‘No brief found for this scope.’ With an ID, access is checked against the brief’s own scope.
draft_list
List outreach drafts within the token scope and its descendants. Requires read.
- status (optional)
- Optional: pending, approved, sent or rejected. Defaults to pending.
- limit (optional)
- Optional integer from 1 to 50. Defaults to 20.
{
"name": "draft_list",
"arguments": {
"status": "pending",
"limit": 5
}
}Result: Text rows containing draft ID, subject, contact and campaign when present, or an empty list message. Does not return the full draft body.
draft_approve
Approve a pending outreach draft. Requires write.
- draftId (required)
- String. An ID from draft_list.
- editedBody (optional)
- Optional string. A replacement body to save with the approval.
{
"name": "draft_approve",
"arguments": {
"draftId": "replace_with_draft_id"
}
}Result: Text confirming approval. The draft is ready to send from the Willder inbox; this tool does not send the email. Requires access to the draft’s own scope. An already decided draft returns a tool error.
draft_reject
Reject a pending outreach draft. Requires write.
- draftId (required)
- String. An ID from draft_list.
- reason (optional)
- Optional string. Feedback to record with the decision.
{
"name": "draft_reject",
"arguments": {
"draftId": "replace_with_draft_id",
"reason": "The launch date needs confirmation."
}
}Result: Text confirming rejection. Requires access to the draft’s own scope. An already decided draft returns a tool error.
campaign_list
List campaigns within the token scope and its descendants. Requires read.
- limit (optional)
- Optional integer from 1 to 50. Defaults to 20.
{
"name": "campaign_list",
"arguments": {
"limit": 5
}
}Result: Text rows containing campaign ID, name, status and prospect and draft counts, or ‘No campaigns yet.’
Response format and limits
Tool results contain content text blocks. Tool failures set isError: true; protocol errors use the JSON RPC error envelope. Do not treat HTTP 200 alone as success.
Read tools that accept a scope fall back to the token scope if a supplied scope path is malformed. Memory writes reject malformed nonempty paths. Always copy an existing path and validate the intended scope in your client.
There is currently no MCP tool for deleting or updating memory, issuing or revoking tokens, or sending an approved email. Linking a source does not add these capabilities.