Truvon MCP
Provides AI agents with checked, dated facts about local U.S. businesses, including open status, contact details, services, and booking options, sourced from official business sites and open data.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://truvon.ai/mcpWhat its tools do
13 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (6)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to truvon.ai ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Find local businesses matching a specific need
- Check if a business is currently open
- Retrieve verified phone numbers and addresses
- Access booking or ordering links for businesses
Source and maintenance
Protocol and capabilities
- Server
- Truvon 1.0.1
- MCP protocol negotiated in check
- 2025-06-18
- Tools
- 13 advertised
- Resources
- 1 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
},
"resources": {
"listChanged": false
},
"extensions": {
"io.modelcontextprotocol/ui": {
"mimeTypes": [
"text/html;profile=mcp-app"
]
}
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
13 advertised
find_local_businesses — Find local businesses
Find local businesses that fit a need near a place. Give the service in a few plain words ("furnace repair", "water heater leak"), not the user's sentence; timing goes in open_at. Each result says why it fits, its hours and whether it is open now ("open:" is whether it is in business), the phone, and how to act. 5 results by default; limit asks for more, and max_minutes keeps them close. Truvon has no reviews or ratings, and menus, prices and service details only where a business publishes them.
{
"type": "object",
"required": [
"need"
],
"properties": {
"lat": {
"type": "number",
"description": "The user's latitude in decimal degrees, with lon: the most exact place to measure distance from"
},
"lon": {
"type": "number",
"description": "The user's longitude in decimal degrees, with lat"
},
"zip": {
"type": "string",
"description": "The user's 5-digit ZIP code, instead of place"
},
"need": {
"type": "string",
"description": "The service in a few plain words: \"furnace repair\", \"water heater leak\", \"bbq catering for 12\". Not the user's whole sentence: matching is by meaning and exact words, so symptoms and timing hide the service. Timing goes in open_at, requirements in the filters"
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "How many results (default 5)"
},
"model": {
"type": "string",
"description": "Optional: the model you run on (for example claude-sonnet-5-5), kept with the provenance of this call. Leave it out if you do not know."
},
"place": {
"type": "string",
"description": "Where the user is, always with its state: \"Town, ST\" (e.g. \"Springfield, IL\") or \"Neighborhood, Town, ST\" (e.g. \"Castro, San Francisco, CA\"); \"City, CC-RR\" with an ISO 3166-2 region outside the US. A place without a state is refused, with the towns it could be. Or send zip, or lat and lon, instead"
},
"action": {
"type": "string",
"description": "Only businesses that offer this: book, order, quote, call or message (comma means any)"
},
"detail": {
"enum": [
"compact",
"full"
],
"type": "string",
"description": "compact (default) or full records"
},
"prices": {
"type": "boolean",
"description": "Only businesses that state prices"
},
"open_at": {
"type": "string",
"description": "Open at a specific day and time in the business's local time, e.g. \"sat 18:00\"; or \"now\", \"today\", \"tonight\", \"tomorrow\", \"tomorrow 9am\"; or an ISO 8601 date and time, e.g. \"2026-11-08T18:00\" (the business's local time unless it carries an offset or Z). For a range like \"this week\", leave it out and judge from the hours shown"
},
"refines": {
"type": "string",
"description": "The search_id of an earlier search this one narrows (one choice of an \"A or B\", a more specific wording, an added requirement). Links the two so we learn what the first answer lacked"
},
"max_miles": {
"type": "number",
"description": "Only businesses within this many miles of the place (businesses that serve online always pass)"
},
"completable": {
"type": "boolean",
"description": "Only businesses an agent can complete the action with itself: a Truvon door, or the business's own MCP server, API or commerce endpoint once it has claimed its listing (treated the same); the rest are removed and counted"
},
"max_minutes": {
"type": "number",
"description": "Only businesses within this many minutes of estimated driving (straight line with a road and river-crossing estimate, not a routing service), counted only where someone must be physically present; online and remote service always passes"
},
"include_closed": {
"type": "boolean",
"description": "Also list businesses likely closed or closed (left out by default; open on each result says why)"
}
}
}{
"type": "object",
"required": [
"search_id",
"results"
],
"properties": {
"query": {
"type": "object",
"description": "The need as read: what it matched on and the kind of business it calls for"
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"truvon_id",
"name"
],
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The business's name"
},
"truvon_id": {
"type": "string",
"description": "Its Truvon ID (biz_…), the business argument of get_business_record and report_outcome"
}
}
},
"description": "The businesses that fit, best first, as the text lists them"
},
"showing": {
"type": "string",
"description": "What the results are, in one line"
},
"possible": {
"type": "array",
"items": {
"type": "object",
"required": [
"truvon_id",
"name"
],
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The business's name"
},
"truvon_id": {
"type": "string",
"description": "Its Truvon ID (biz_…), the business argument of get_business_record and report_outcome"
}
}
},
"description": "Businesses that may fit, as the text lists them under Possible"
},
"search_id": {
"type": "string",
"description": "This search (srch_…), for report_outcome, show_results and refines"
},
"next_cursor": {
"type": [
"string",
"null"
],
"description": "The cursor for the next page (more_results); none on the last page"
},
"measured_from": {
"type": [
"object",
"null"
],
"description": "The point distances are measured from, and how it was found"
},
"follow_ups_due": {
"type": "array",
"items": {
"type": "object"
},
"description": "Earlier outcomes due a follow-up with your user"
}
}
}{
"title": "Find local businesses",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}more_results — Get more search results
Get the next page of a search by the next_cursor it returned (kept 24 hours). Narrowing the need usually beats paging.
{
"type": "object",
"required": [
"cursor"
],
"properties": {
"cursor": {
"type": "string",
"description": "next_cursor from the last find_local_businesses or more_results response"
}
}
}{
"type": "object",
"required": [
"search_id",
"results"
],
"properties": {
"query": {
"type": "object",
"description": "The need as read: what it matched on and the kind of business it calls for"
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"truvon_id",
"name"
],
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The business's name"
},
"truvon_id": {
"type": "string",
"description": "Its Truvon ID (biz_…), the business argument of get_business_record and report_outcome"
}
}
},
"description": "The businesses that fit, best first, as the text lists them"
},
"showing": {
"type": "string",
"description": "What the results are, in one line"
},
"possible": {
"type": "array",
"items": {
"type": "object",
"required": [
"truvon_id",
"name"
],
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The business's name"
},
"truvon_id": {
"type": "string",
"description": "Its Truvon ID (biz_…), the business argument of get_business_record and report_outcome"
}
}
},
"description": "Businesses that may fit, as the text lists them under Possible"
},
"search_id": {
"type": "string",
"description": "This search (srch_…), for report_outcome, show_results and refines"
},
"next_cursor": {
"type": [
"string",
"null"
],
"description": "The cursor for the next page (more_results); none on the last page"
},
"measured_from": {
"type": [
"object",
"null"
],
"description": "The point distances are measured from, and how it was found"
},
"follow_ups_due": {
"type": "array",
"items": {
"type": "object"
},
"description": "Earlier outcomes due a follow-up with your user"
}
}
}{
"title": "Get more search results",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}get_business_record — Get a business record
Get one business's full record by its truvon_id or website domain: each fact with its source and date, every source's value where they disagree, prices, offers, hours and every way to act. Open it for a finalist, and whenever a phone or address matters. A business Truvon does not list has no record.
{
"type": "object",
"required": [
"domain"
],
"properties": {
"domain": {
"type": "string",
"description": "The business's website domain, or its truvon_id (biz_…) from a result; the id is exact when a domain is listed in several markets. Never a name"
},
"format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown",
"description": "The form of the record: markdown (the default, as text) or json (the same record as structured data)"
},
"search_id": {
"type": "string",
"description": "The search_id this listing came from, if any"
}
}
}{
"type": "object",
"required": [
"truvon_id",
"name"
],
"properties": {
"url": {
"type": "string",
"description": "With format markdown: the address of this record in Markdown"
},
"name": {
"type": [
"string",
"null"
],
"description": "The business's name"
},
"facts": {
"type": "object",
"description": "With format json: each fact with its source, date and confidence"
},
"links": {
"type": "object",
"description": "With format json: the addresses of this record, its grade and its field history"
},
"actions": {
"type": "array",
"items": {
"type": "object"
},
"description": "With format json: every way to act, each with where it leads"
},
"website": {
"type": [
"string",
"null"
],
"description": "With format json: its own website"
},
"truvon_id": {
"type": "string",
"description": "Its Truvon ID (biz_…)"
}
}
}{
"title": "Get a business record",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}check_places_results — Check businesses you found
Check up to 10 businesses you found elsewhere (maps, web, a link) before you give your user a phone or send them somewhere: open or closed with dated evidence, the phone its sources agree on, how to act. Send the name plus phone, website or address, and the town. With the need, you also get two listed businesses that fit it that you did not send. One not found is reported as not in Truvon.
{
"type": "object",
"properties": {
"zip": {
"type": "string",
"description": "The businesses' 5-digit U.S. ZIP code, instead of place"
},
"name": {
"type": "string",
"description": "One business: its name (or use businesses)"
},
"need": {
"type": "string",
"description": "Your user's need: the next step quotes the lines of each business's own pages that answer it, and may_have_missed lists the two best businesses for it that you did not send"
},
"phone": {
"type": "string",
"description": "One business: its phone number as you found it, in any format"
},
"place": {
"type": "string",
"description": "The town the businesses are in, with its state: \"Town, ST\" (e.g. \"Kirkwood, MO\")"
},
"address": {
"type": "string",
"description": "The street address as you found it"
},
"website": {
"type": "string",
"description": "One business: its website address or domain, e.g. example.com"
},
"businesses": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The business's name as you found it"
},
"phone": {
"type": "string",
"description": "Its phone number as you found it, in any format"
},
"address": {
"type": "string",
"description": "The street address as you found it"
},
"website": {
"type": "string",
"description": "Its website address or domain, e.g. example.com"
}
}
},
"maxItems": 10,
"description": "Several businesses to check at once, each with what you have; place, zip and need below apply to all"
}
}
}{
"type": "object",
"properties": {
"note": {
"type": "string",
"description": "What the check found, in a sentence"
},
"match": {
"type": [
"object",
"null"
],
"description": "The listed business it is, with why it matched; null when no listing is clearly it"
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"note": {
"type": "string",
"description": "What the check found, in a sentence"
},
"asked": {
"type": "string",
"description": "What was sent for it"
},
"error": {
"type": "string",
"description": "Why it could not be checked"
},
"match": {
"type": [
"object",
"null"
],
"description": "The listed business it is, with why it matched; null when no listing is clearly it"
},
"candidates": {
"type": "array",
"items": {
"type": "object"
},
"description": "Listed businesses it could be, each with why"
}
}
},
"description": "With businesses: one check per business sent, in order"
},
"candidates": {
"type": "array",
"items": {
"type": "object"
},
"description": "Listed businesses it could be, each with why"
},
"may_have_missed": {
"type": "object",
"description": "With the need: the best listed businesses for it that were not checked, and their search_id"
},
"may_have_missed_note": {
"type": "string",
"description": "Why may_have_missed is absent"
}
}
}{
"title": "Check businesses you found",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}show_results — Show results with what you found
Show your user a search's results in one view with what you found on the web for each (a rating and where it comes from, the review count, a link, a one-line note). Optional, after find_local_businesses. Your additions are labeled as yours, never as Truvon's, and never change rank.
{
"type": "object",
"required": [
"search_id",
"found"
],
"properties": {
"found": {
"type": "array",
"items": {
"type": "object",
"required": [
"business"
],
"properties": {
"note": {
"type": "string",
"description": "One line your user should know, in your words (160 characters)"
},
"rating": {
"type": "number",
"description": "The rating you saw"
},
"business": {
"type": "string",
"description": "The result's truvon_id (biz_…)"
},
"source_url": {
"type": "string",
"description": "An https link to where you saw it"
},
"rating_scale": {
"type": "number",
"description": "Its scale, if not out of 5"
},
"review_count": {
"type": "integer",
"description": "How many reviews it rests on"
},
"rating_source": {
"type": "string",
"description": "Where the rating comes from, e.g. \"Google\" or \"Yelp\" (required with a rating)"
}
}
},
"maxItems": 10,
"description": "What you found, one entry per result you have something for"
},
"model": {
"type": "string",
"description": "Optional: the model you run on (for example claude-sonnet-5-5), kept with the provenance of this call. Leave it out if you do not know."
},
"search_id": {
"type": "string",
"description": "The search_id find_local_businesses returned (kept 24 hours)"
}
}
}{
"type": "object",
"required": [
"search_id",
"results"
],
"properties": {
"query": {
"type": "object",
"description": "The need as read: what it matched on and the kind of business it calls for"
},
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"truvon_id",
"name"
],
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The business's name"
},
"truvon_id": {
"type": "string",
"description": "Its Truvon ID (biz_…), the business argument of get_business_record and report_outcome"
}
}
},
"description": "The businesses that fit, best first, as the text lists them"
},
"showing": {
"type": "string",
"description": "What the results are, in one line"
},
"possible": {
"type": "array",
"items": {
"type": "object",
"required": [
"truvon_id",
"name"
],
"properties": {
"name": {
"type": [
"string",
"null"
],
"description": "The business's name"
},
"truvon_id": {
"type": "string",
"description": "Its Truvon ID (biz_…), the business argument of get_business_record and report_outcome"
}
}
},
"description": "Businesses that may fit, as the text lists them under Possible"
},
"search_id": {
"type": "string",
"description": "This search (srch_…), for report_outcome, show_results and refines"
},
"next_cursor": {
"type": [
"string",
"null"
],
"description": "The cursor for the next page (more_results); none on the last page"
},
"measured_from": {
"type": [
"object",
"null"
],
"description": "The point distances are measured from, and how it was found"
},
"follow_ups_due": {
"type": "array",
"items": {
"type": "object"
},
"description": "Earlier outcomes due a follow-up with your user"
}
}
}{
"title": "Show results with what you found",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_field_history — Get the history of a fact
Get every value one fact of a business (phone, hours, address, name) has held, with which source said it and when: how settled a value is.
{
"type": "object",
"required": [
"business"
],
"properties": {
"field": {
"type": "string",
"description": "The field, e.g. phone, address, hours, name; leave out for every field in short"
},
"format": {
"enum": [
"markdown",
"json"
],
"type": "string",
"default": "markdown",
"description": "The form of the history: markdown (the default, as text) or json (the same history as structured data)"
},
"business": {
"type": "string",
"description": "The truvon_id from a result (biz_…) or the business's website domain. Never a name"
}
}
}{
"type": "object",
"required": [
"truvon_id",
"name"
],
"properties": {
"url": {
"type": "string",
"description": "With format markdown: the address of this history in Markdown"
},
"name": {
"type": [
"string",
"null"
],
"description": "The business's name"
},
"field": {
"type": [
"string",
"null"
],
"description": "The field asked for; null for every field in short"
},
"links": {
"type": "object",
"description": "With format json: the addresses of the business's record and of this history"
},
"fields": {
"type": "array",
"items": {
"type": "object"
},
"description": "With format json: each field with every value it has held, its sources and dates"
},
"truvon_id": {
"type": "string",
"description": "The business's Truvon ID (biz_…)"
}
}
}{
"title": "Get the history of a fact",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}report_answer — Report what a business said
Record what a business told you that its record lacks ("yes, certified kosher"): the question and its answer in its words, with the business's truvon_id.
{
"type": "object",
"required": [
"business",
"question",
"answer",
"channel"
],
"properties": {
"model": {
"type": "string",
"description": "Optional: the model you run on (for example claude-sonnet-5-5), kept with the provenance of this call. Leave it out if you do not know."
},
"answer": {
"type": "string",
"description": "What the business said, in its words as near as you can (up to 500 characters)"
},
"channel": {
"enum": [
"phone",
"message",
"email",
"in_person",
"door",
"chat",
"other"
],
"type": "string",
"description": "How you asked it"
},
"business": {
"type": "string",
"description": "The truvon_id from a result (biz_…) or the business's website domain. Never a name. Only a business Truvon lists (report_missing reports one it does not)"
},
"question": {
"type": "string",
"description": "What you asked, in your words (up to 200 characters)"
},
"search_id": {
"type": "string",
"description": "The search_id that led you to the business, if any"
},
"connection": {
"type": "string",
"description": "The connection code connect_truvon gave you, once your user approved its link. Not needed when your app signed in to Truvon itself."
}
}
}{
"type": "object",
"properties": {
"note": {
"type": "string",
"description": "What was done with it, in a sentence"
},
"answer": {
"type": "string",
"description": "The recorded answer's id"
},
"reason": {
"type": "string",
"description": "When the call was refused: why, as the agent identity protocol names it (/.well-known/truvon-agent-auth)"
},
"business": {
"type": "string",
"description": "The business it was recorded on"
},
"recorded": {
"type": "boolean",
"description": "Whether it was recorded (always false in the sandbox, which records nothing)"
},
"would_record": {
"type": "object",
"description": "In the sandbox: what would have been recorded"
}
}
}{
"title": "Report what a business said",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}report_outcome — Report how it went
Record what happened when you acted for your user (booked, ordered, called, got a quote), with the search_id and the business's truvon_id. When something was arranged it returns a follow-up, questions for your user once the outcome is known, and for a job a job id.
{
"type": "object",
"required": [
"business",
"action",
"outcome"
],
"properties": {
"via": {
"enum": [
"door",
"agent_endpoint",
"platform",
"link",
"phone",
"email"
],
"type": "string",
"description": "How you acted: a Truvon door, the business's own agent endpoint, a platform (a booking or ordering service), its link, its phone, its email"
},
"kind": {
"enum": [
"permanent",
"temporary"
],
"type": "string",
"description": "With business_closed: closed for good, or temporarily (renovation, vacation, season)"
},
"field": {
"enum": [
"phone",
"address",
"website",
"booking_url",
"email"
],
"type": "string",
"description": "With wrong_information: which fact is wrong"
},
"model": {
"type": "string",
"description": "Optional: the model you run on (for example claude-sonnet-5-5), kept with the provenance of this call. Leave it out if you do not know."
},
"phone": {
"type": "string",
"description": "With a confirmed call: the number you reached, when the record gives several"
},
"action": {
"enum": [
"book",
"order",
"quote",
"call",
"message"
],
"type": "string",
"description": "What you did for your user"
},
"source": {
"type": "string",
"description": "With business_closed: the link where you saw it (a news story, its own post, a listing marked closed). It is checked and archived, and if it says so the business is closed for every agent."
},
"correct": {
"type": "string",
"description": "With wrong_information: the right value, as you found it"
},
"failure": {
"enum": [
"no_way_to_act",
"blocked",
"site_error",
"no_availability",
"no_response",
"wrong_information",
"business_closed",
"other"
],
"type": "string",
"description": "When failed. business_closed: the business has closed (say what you saw in detail: a closed sign, a disconnected phone, a recording)"
},
"outcome": {
"enum": [
"confirmed",
"pending",
"handed_off",
"failed"
],
"type": "string",
"description": "confirmed: the business confirmed; pending: submitted, awaiting the business; handed_off: you gave your user the link or number and they finish it (never counts against the business; the follow-up asks whether it happened); failed: give failure"
},
"reopens": {
"type": "string",
"description": "With a temporary closure: the reopening date it states, YYYY-MM-DD"
},
"business": {
"type": "string",
"description": "The truvon_id from a result (biz_…) or the business's website domain. Never a name. Only a business Truvon lists (report_missing reports one it does not)"
},
"assertion": {
"type": "string",
"description": "Platforms only: your Truvon agent assertion (identity protocol §4, a JWS binding this report to your user's pairwise sub), accepted only when this MCP request carries an OAuth DPoP access token."
},
"search_id": {
"type": "string",
"description": "The search_id from find_local_businesses, so the outcome teaches similar future needs"
},
"connection": {
"type": "string",
"description": "The connection code connect_truvon gave you, once your user approved its link. Not needed when your app signed in to Truvon itself."
},
"expected_at": {
"type": "string",
"description": "ISO time when the outcome will be knowable: delivery ETA or appointment time"
}
}
}{
"type": "object",
"properties": {
"why": {
"type": "string",
"description": "Whether the outcome counts toward the business's grade, and why"
},
"note": {
"type": "string",
"description": "What was done with it, in a sentence"
},
"job_id": {
"type": "string",
"description": "For an arranged job: its id (job_…) for get_job"
},
"reason": {
"type": "string",
"description": "When the call was refused: why, as the agent identity protocol names it (/.well-known/truvon-agent-auth)"
},
"recorded": {
"type": "boolean",
"description": "Whether it was recorded (always false in the sandbox, which records nothing)"
},
"ask_after": {
"type": "string",
"description": "When to ask your user the follow-up questions (an ISO time)"
},
"follow_up": {
"type": "string",
"description": "When something was arranged: the follow-up id (fu_…) for answer_follow_up"
},
"questions": {
"type": "array",
"items": {
"type": "object"
},
"description": "The follow-up questions, each with its options"
}
}
}{
"title": "Report how it went",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}report_missing — Report a business Truvon lacks
Report a business Truvon does not list (check_places_results says so) that fits your user's need and that you found elsewhere (the web, a map): send its name, its own website, phone, address and the town, with the need and the search_id. Its own website is queued to be read so it can be listed for every agent.
{
"type": "object",
"required": [
"name"
],
"properties": {
"zip": {
"type": "string",
"description": "Its 5-digit U.S. ZIP code, instead of place"
},
"name": {
"type": "string",
"description": "The business's name as you found it"
},
"need": {
"type": "string",
"description": "The need it fits, in the plain words you searched with"
},
"model": {
"type": "string",
"description": "Optional: the model you run on (for example claude-sonnet-5-5), kept with the provenance of this call. Leave it out if you do not know."
},
"phone": {
"type": "string",
"description": "Its phone number as you found it, in any format"
},
"place": {
"type": "string",
"description": "The town it is in, with its state: \"Town, ST\" (e.g. \"Fenton, MO\")"
},
"address": {
"type": "string",
"description": "Its street address as you found it"
},
"website": {
"type": "string",
"description": "Its own website (never a directory, social or maps page); without one it is recorded but cannot be read"
},
"search_id": {
"type": "string",
"description": "The search_id of the search that did not return it"
},
"connection": {
"type": "string",
"description": "The connection code connect_truvon gave you, once your user approved its link. Not needed when your app signed in to Truvon itself."
}
}
}{
"type": "object",
"properties": {
"gap": {
"type": "string",
"description": "The report's id"
},
"note": {
"type": "string",
"description": "What was done with it, in a sentence"
},
"reason": {
"type": "string",
"description": "When the call was refused: why, as the agent identity protocol names it (/.well-known/truvon-agent-auth)"
},
"status": {
"type": "string",
"description": "queued (its site will be read), recent (read lately), already_listed, or no_website"
},
"recorded": {
"type": "boolean",
"description": "Whether it was recorded (always false in the sandbox, which records nothing)"
},
"truvon_id": {
"type": "string",
"description": "When it is already listed: its Truvon ID"
},
"would_record": {
"type": "object",
"description": "In the sandbox: what would have been recorded"
}
}
}{
"title": "Report a business Truvon lacks",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}answer_follow_up — Answer a follow-up
Record your user's answers to a follow-up's questions, by its follow_up id (from report_outcome, or a follow-up due at the top of a search), once the outcome is known. Closed options only, never personal details.
{
"type": "object",
"required": [
"follow_up"
],
"properties": {
"again": {
"enum": [
"yes",
"unsure",
"no"
],
"type": "string",
"description": "When completed is yes: whether your user would use the business again"
},
"model": {
"type": "string",
"description": "Optional: the model you run on (for example claude-sonnet-5-5), kept with the provenance of this call. Leave it out if you do not know."
},
"reason": {
"enum": [
"business_no_show",
"business_did_not_respond",
"not_available",
"cancelled_with_notice",
"customer_missed",
"price",
"found_another",
"changed_mind",
"other"
],
"type": "string",
"description": "When completed is no: what happened instead"
},
"matched": {
"enum": [
"yes",
"mostly",
"no"
],
"type": "string",
"description": "When completed is yes: whether it was what your user was told to expect (price, timing, details)"
},
"assertion": {
"type": "string",
"description": "Platforms only: your Truvon agent assertion (identity protocol §4, a JWS binding this report to your user's pairwise sub), accepted only when this MCP request carries an OAuth DPoP access token."
},
"completed": {
"enum": [
"yes",
"no",
"not_yet"
],
"type": "string",
"description": "Whether it happened: yes, no, or not_yet (asked again later)"
},
"different": {
"type": "array",
"items": {
"enum": [
"price",
"hours",
"availability",
"location",
"service",
"other"
],
"type": "string"
},
"description": "When matched is mostly or no: what was different"
},
"elsewhere": {
"enum": [
"yes",
"no"
],
"type": "string",
"description": "Cancelled jobs: did your user get it done elsewhere"
},
"follow_up": {
"type": "string",
"description": "The follow-up id (fu_…) from report_outcome, or from the follow-ups due at a search's top"
},
"satisfied": {
"type": "integer",
"maximum": 5,
"minimum": 1,
"description": "When completed is yes: how satisfied your user was, from 1 to 5"
},
"connection": {
"type": "string",
"description": "The connection code connect_truvon gave you, once your user approved its link. Not needed when your app signed in to Truvon itself."
}
}
}{
"type": "object",
"properties": {
"note": {
"type": "string",
"description": "What was done with the answers, in a sentence"
},
"reason": {
"type": "string",
"description": "When the call was refused: why, as the agent identity protocol names it (/.well-known/truvon-agent-auth)"
},
"status": {
"type": "string",
"description": "answered; or open, when your user said not yet"
},
"recorded": {
"type": "boolean",
"description": "In the sandbox: false, since it records nothing"
},
"ask_after": {
"type": "string",
"description": "When open: when to ask again (an ISO time)"
},
"follow_up": {
"type": "string",
"description": "The follow-up answered"
}
}
}{
"title": "Answer a follow-up",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_job — Get a job's status
Get the status of a job you arranged and the business's updates, by the job id report_outcome returned, when your user asks about it.
{
"type": "object",
"required": [
"job"
],
"properties": {
"job": {
"type": "string",
"description": "The job_id, job_…"
},
"connection": {
"type": "string",
"description": "The connection code connect_truvon gave you, once your user approved its link. Not needed when your app signed in to Truvon itself."
}
}
}{
"type": "object",
"properties": {
"job": {
"type": "string",
"description": "The job id (job_…)"
},
"kind": {
"type": "string",
"description": "What was arranged: book, order, quote, call or message"
},
"reason": {
"type": "string",
"description": "When the call was refused: why, as the agent identity protocol names it (/.well-known/truvon-agent-auth)"
},
"status": {
"type": "string",
"description": "The job's status, as the business last set it"
},
"history": {
"type": "array",
"items": {
"type": "object"
},
"description": "The business's updates, oldest first"
},
"business": {
"type": [
"string",
"null"
],
"description": "The business doing it"
},
"scheduled_for": {
"type": [
"string",
"null"
],
"description": "When it is for, if a time was set"
}
}
}{
"title": "Get a job's status",
"readOnlyHint": true,
"openWorldHint": false,
"destructiveHint": false
}connect_truvon — Connect for reporting
Connect for reporting when your app has not signed in to Truvon itself: a link your user approves with one tap (no account), and a connection code the reporting tools then accept as their connection argument. Searching needs none of this.
{
"type": "object",
"properties": {
"client": {
"type": "string",
"description": "Your assistant or product name, for Truvon's own records (optional; never shown to the person)"
}
}
}{
"type": "object",
"required": [
"link",
"connection"
],
"properties": {
"link": {
"type": "string",
"description": "The link for your user to open and approve with one tap (good for 24 hours)"
},
"connection": {
"type": "string",
"description": "The connection code (tvia_…), the reporting tools' connection argument once your user has approved"
},
"expires_in": {
"type": "integer",
"description": "How many seconds the link stays good"
}
}
}{
"title": "Connect for reporting",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}note_choice — Note a choice in the results view
Note the person's tap on a result's button in Truvon's results view, which calls it; agents never need to.
{
"type": "object",
"required": [
"search_id",
"business",
"action"
],
"properties": {
"action": {
"enum": [
"call",
"book",
"order",
"quote",
"message",
"record",
"reviews"
],
"type": "string",
"description": "What the person tapped"
},
"business": {
"type": "string",
"description": "The result's truvon_id"
},
"search_id": {
"type": "string",
"description": "The search the result came from"
}
}
}{
"title": "Note a choice in the results view",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
Truvon results
Search results as cards with a map of where each business is
ui://truvon/results90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
- 2026-11-09: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1462 ms
- 95th percentile latency
- 1462 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1462 ms · metadata changed · 13 tool(s), 1 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http truvon-mcp https://truvon.ai/mcpCodex
codex mcp add truvon-mcp --url https://truvon.ai/mcpCursor
{
"mcpServers": {
"truvon-mcp": {
"url": "https://truvon.ai/mcp"
}
}
}Cline
{
"mcpServers": {
"truvon-mcp": {
"type": "streamableHttp",
"url": "https://truvon.ai/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"truvon-mcp": {
"type": "http",
"url": "https://truvon.ai/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http truvon-mcp https://truvon.ai/mcpClaude Desktop
https://truvon.ai/mcpWindsurf
{
"mcpServers": {
"truvon-mcp": {
"serverUrl": "https://truvon.ai/mcp"
}
}
}Let your agent find its tools
Find servers like Truvon MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other data and analytics servers
Do you run Truvon MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.