The two tools
The AI decides which tool to use based on the question. Conceptual or open-ended questions (“how does upsert work?”) favor search. Specific reference needs (“show me line 47 of the Volunteer schema”) favor the filesystem tool.
Many workflows use both: search first to find the right pages, then read those pages with the filesystem tool.
Tool 1: search_virtuous_api_docs
A semantic search across the Virtuous documentation. Returns snippets with titles and direct links to the pages where the matches were found.
When the AI uses it
- Broad questions: “How does authentication work for the Volunteer API?”
- Discovery: “What documentation exists about webhook retries?”
- Comparison: “What are the differences in pagination across the three Virtuous APIs?”
- Initial orientation: “I’m new to Virtuous — where do I start for building a CRM+ integration?”
What it returns
A list of relevant content snippets, each with:- A title (the page or section it’s from)
- A short preview of the content
- A link to the page
Parameters the AI can use
- A search query (the text to search for)
- Optional filters (language, version) — if the Virtuous docs ever support multiple languages or versions, these parameters let the AI narrow results
Strengths
- Finds relevant pages even when keywords don’t match exactly
- Returns multiple candidate pages so the AI can pick the most relevant
- Faster than reading through the full docs
Limitations
- Returns snippets, not full pages — for the complete content, the AI typically follows up with the filesystem tool
- Search relevance depends on query phrasing — too-broad queries return less useful results
- Can’t do exact-text or regex matches (use the filesystem tool for that)
Tool 2: query_docs_filesystem_virtuous_api_docs
A read-only shell-like interface over a virtualized in-memory filesystem containing only the Virtuous documentation pages and OpenAPI specs. The AI can run shell-like commands against this filesystem to read pages, search exactly, or explore structure.
When the AI uses it
- Reading full page content:
cat /volunteer/concepts/users.mdx - Exact keyword search:
rg "Idempotency-Key" / - Structural exploration:
tree / -L 2orls /volunteer/ - Reading the OpenAPI specs:
cat /openapi/Volunteer-OpenAPI-Spec.json | jq '.paths | keys' - Reading specific sections of long pages with context:
rg -C 5 "email-change problem" /volunteer/
Supported commands
The filesystem tool supports these read-only utilities:
Not supported: any write operations, network access, process control. The tool is a sandbox.
Critical behavior: stateless
Each call to the filesystem tool is stateless. The working directory always resets to/, and no shell variables, aliases, or history carry over between calls.
This means if the AI wants to operate in a subdirectory, it has to either:
- Use absolute paths in every command:
ls /volunteer/concepts/ - Chain commands in a single call:
cd /volunteer/concepts && ls
Critical behavior: output limit
Output is truncated to 30KB per call. For long pages, the AI useshead -N, tail -N, or rg -C N "pattern" to read just the relevant portion rather than cat-ing the whole file.
Path conventions
Pages in the filesystem use the.mdx extension. The AI reads /volunteer/concepts/users.mdx to access the Users concept page.
When the AI references pages back to you in its response, it converts filesystem paths to URL paths by removing the .mdx — so it’ll cite /volunteer/concepts/users rather than /volunteer/concepts/users.mdx.
Example commands
A flavor of what the AI runs under the hood:Strengths
- Exact keyword and regex matching (search is semantic; filesystem is exact)
- Full page content access for detailed analysis
- Direct access to the OpenAPI specs (queryable with
jq) - Useful for cross-page analysis (e.g., “find all pages that mention X”)
- Batches multiple file reads in a single call
Limitations
- 30KB output cap per call (manageable, but the AI works around it)
- Stateless calls (the AI handles, but it’s why queries can look elaborate)
- Read-only (cannot modify, can only read)
- Only the docs — no access to anything outside the documentation set
When the AI uses one tool vs. the other
The AI’s decision process roughly: In practice the AI often uses both in sequence — search to find candidate pages, then filesystem to read the relevant ones in detail. This is the most common pattern.Examples of the AI using these tools
A few scenarios, with the tools the AI typically picks:Scenario 1: “How does the Volunteer Users upsert work?”
Scenario 2: “What fields does POST /users require?”
This is a case where search would be slower — the AI goes straight to the source.
Scenario 3: “What patterns do the docs recommend for handling 429 responses?”
Scenario 4: “What’s the structure of the Volunteer Polling and Sync documentation?”
A structural question that doesn’t need full page reads.
Steering the AI toward one tool
For most workflows, you don’t need to steer — the AI picks well. But occasionally you’ll want to nudge:
The AI translates these to the appropriate tool calls.
Tool usage hygiene
A few practices the AI follows that are worth knowing about — and that you can encourage with your prompts:Bounded reads
The AI doesn’tcat huge files when it doesn’t need to. It uses head -N or rg -C N to get just the relevant portion. This stays within the 30KB output limit and produces faster, more focused answers.
Batched reads
When the AI needs multiple files, it batches them into a singlehead or cat call rather than separate calls. head -100 /file1.mdx /file2.mdx /file3.mdx in one call beats three separate calls.
Targeted search first, broad search second
The AI typically starts with narrow searches (specific keywords, specific directories) before falling back to broad ones. This produces tighter results faster.URL path conversion in responses
When the AI references a docs page back to you, it converts/volunteer/concepts/users.mdx to /volunteer/concepts/users — the URL path you’d use in a browser. You’ll see references in the documented URL form.
Inspecting tool usage in your AI tool
Some AI tools surface which MCP tools were called for each response. This can be useful when:- You’re learning how MCP works under the hood
- The AI’s answer seems off and you want to verify it actually consulted the docs
- You’re debugging why the AI isn’t producing documented patterns
If the AI claims to have consulted the docs but no
search_virtuous_api_docs or query_docs_filesystem_virtuous_api_docs call shows up, the answer is from training data — treat with appropriate skepticism.
What the AI does not do with these tools
A few things worth being clear about:
See What’s read and what’s not in the MCP Overview for the full security boundary.
Where to go next
Using MCP for Integration Development
The practical day-to-day patterns for using MCP while building partner integrations.
Connect to the Virtuous MCP Server
Setup instructions for Claude, Claude Code, Cursor, VS Code, and other tools.
MCP Overview
What MCP is, why it matters, and the full security model.
Integration Pathway
The partner integration workflow — MCP fits throughout development.