MCP tools
The Prelint MCP server lets AI agents search product decisions, read the glossary, record new decisions, and curate the ledger.
Each tool below has a sample prompt to send your agent after you connect it to Prelint. The agent picks and calls the tools.
Keep human confirmation on for write tools. Take care when you use Prelint with other MCP servers, to avoid prompt injection.
Shared parameters
Every tool that works on a project takes project_id or project. Those that return lists also take page and page_size. The tables below leave these out.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| project_id | integer | No | - | The project to work on. Omit it when you can see only one project. |
| project | string | No | - | The project slug or exact name, instead of project_id. A prefix matches nothing. |
| page | integer | No | 1 | The page of results, starting at 1. |
| page_size | integer | No | 50 | Results per page, from 1 to 100. The default is 20 for search_statements and list_ingestions. |
A failed call returns an error the agent can read, such as 404: Not found in this organization. The agent can then correct the call.
Look up decisions
Every connected user gets these, and none change anything.
search_statements
Search statements by meaning and return up to 50 ranked hits. Each hit says whether it has an open contradiction. The agent calls this before it proposes product behavior.
Access: Read
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| q | string | Yes | - | The fact you want, as a short phrase. Write 'the interval between digest emails', not 'how often do we send digests?'. |
| min_similarity | number | No | 0.25 | Drop hits below this similarity, from 0.0 to 1.0. |
| status | string | No | - | pending, accepted, rejected, or superseded. |
| topic_id | integer | No | - | Only statements under this topic. |
| certainty | string | No | - | Only statements with this certainty. |
| ingestion_id | integer | No | - | Only statements from this ingestion. |
Sample prompt: "What did we decide about the trial length?"
list_statements
List statements in a project, newest first. For questions about meaning, use search_statements.
Access: Read
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| status | string | No | - | pending, accepted, rejected, or superseded. |
| topic_id | integer | No | - | Only statements under this topic. |
| certainty | string | No | - | Only statements with this certainty. |
| ingestion_id | integer | No | - | Only statements from this ingestion. |
Sample prompt: "List the pending statements in the billing project."
get_statement_provenance
Show where a statement came from and what replaced it. The agent calls this before it acts against a statement.
Access: Read
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| statement_id | integer | Yes | - | The statement to trace. |
Sample prompt: "Where did the statement about annual discounts come from?"
locate_statement
Find which project owns a statement id. It searches the whole organization, so it takes no project.
Access: Read
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| statement_id | integer | Yes | - | A statement id from any project. |
Sample prompt: "Which project is statement 4812 in?"
list_glossary_terms
List the product's vocabulary. The agent reads it before it names anything, so new code uses existing terms.
Access: Read
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| q | string | No | - | A word or fragment to match in the name, aliases, or definition. Case does not matter. |
| category | string | No | - | Only terms in this category. |
| status | string | No | - | Only terms with this status. |
Sample prompt: "Is 'workspace' or 'organization' the right term in our product?"
list_topics
List the topics that group a project's statements.
Access: Read
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| status | string | No | - | Only topics with this status. |
| topic_id | integer | No | - | Only this topic. |
Sample prompt: "What topics does the billing project cover?"
list_contradictions
List pairs of statements that conflict. While a contradiction is open, neither statement is settled.
Access: Read
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| resolved | boolean | No | false | Pass true to list resolved items instead of open ones. |
| topic_id | integer | No | - | Only contradictions that touch this topic. |
| statement_id | integer | No | - | Only contradictions that involve this statement. |
Sample prompt: "List the open contradictions in the billing topic."
list_topic_events
List topic changes that wait for a decision, such as merges and archives. Prelint applies most renames and description updates on its own.
Access: Read
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| resolved | boolean | No | false | Pass true to list resolved items instead of open ones. |
Sample prompt: "Are any topic merges waiting for review?"
list_terminology_events
List proposed term renames, merges, deprecations, and definition changes that wait for a decision.
Access: Read
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| resolved | boolean | No | false | Pass true to list resolved items instead of open ones. |
Sample prompt: "Which glossary changes are waiting for a decision?"
whoami
Return your organization, permissions, and every project you can read.
Access: Read
Sample prompt: "Which Prelint projects can you see?"
list_projects
List every project in your organization with its id, name, and slug.
Access: Read
Sample prompt: "List my Prelint projects."
Record decisions
Send new material to the ledger and track it.
ingest_text
Record a decision, its reasoning, a constraint, or a rejected option. Prelint saves the text when the call returns. It then splits the text into statements, files them under topics, and flags conflicts.
Access: Write, needs the Ingest permission
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| raw_input | string | Yes | - | The full thought, up to 500,000 characters. Extraction sees only this text, so include the reasons and context. |
| source_date | date | No | - | When the original content was created, for example the date of the call. |
| source_reference | string | No | - | A label for the source, for example 'Product call Mar 28'. Up to 500 characters. |
Sample prompt: "Record in Prelint that we are dropping the annual plan discount, because few customers chose it."
list_ingestions
List a project's ingestions, newest first by the time Prelint recorded them.
Access: Read
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| status | string | No | - | Only ingestions with this status. 'active' matches every ingestion still in progress. |
| source_type | string | No | - | Only ingestions from this source. |
Sample prompt: "Show what was recorded in Prelint this week."
get_ingestion
Report how far extraction got and how many statements it produced. Right after ingest_text, it usually shows work still in progress.
Access: Read
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| ingestion_id | integer | Yes | - | The ingestion to check. |
Sample prompt: "Did the notes I just recorded finish processing?"
delete_ingestion
Delete an ingestion. Statements that no other ingestion supports go back to pending. It fails while extraction still runs.
Access: Write, for the creator or the Manage brain permission
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| ingestion_id | integer | Yes | - | The ingestion to delete. |
Sample prompt: "Delete the notes I recorded by mistake."
Curate the ledger
Decide what counts. These tools need the Manage brain permission, which admins have. The server hides them from everyone else.
accept_statement
Accept a pending statement, so it becomes active product context.
Access: Write, needs Manage brain
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| statement_id | integer | Yes | - | A pending statement. |
Sample prompt: "Accept the pending statement about the 14-day trial."
reject_statement
Reject a statement, so it stops counting as product context.
Access: Write, needs Manage brain
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| statement_id | integer | Yes | - | The statement to reject. |
Sample prompt: "Reject the statement that says trials last 30 days."
confirm_statement
Confirm that an accepted statement past its expiry is still true.
Access: Write, needs Manage brain
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| statement_id | integer | Yes | - | An expired accepted statement. |
Sample prompt: "The expired statement about invoice due dates is still true. Confirm it."
resolve_contradiction
Settle a contradiction between two statements.
Access: Write, needs Manage brain
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| relationship_id | integer | Yes | - | The contradiction id from list_contradictions. |
| resolution | string | Yes | - | kept_existing, replaced, or coexist. |
| note | string | No | - | The reason, up to 2,000 characters. Required for coexist. |
Sample prompt: "Settle the trial length contradiction in favor of the 14-day trial."
resolve_topic_event
Accept or dismiss a proposed topic change.
Access: Write, needs Manage brain
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| event_id | integer | Yes | - | The event id from list_topic_events. |
| resolution | string | Yes | - | accepted or dismissed. |
| note | string | No | - | The reason for the decision, up to 2,000 characters. |
Sample prompt: "Accept the proposed merge of the Billing and Payments topics."
resolve_terminology_event
Accept or dismiss a proposed glossary change.
Access: Write, needs Manage brain
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| event_id | integer | Yes | - | The event id from list_terminology_events. |
| resolution | string | Yes | - | accepted or dismissed. |
| note | string | No | - | The reason for the decision, up to 2,000 characters. |
Sample prompt: "Dismiss the proposed rename of 'workspace' to 'team'."
The server does not start pull request reviews or read their findings. Those arrive on the pull request, as described in how reviews work.