Examples
Copy-pasteable JSON-RPC. Substitute $ENDPOINT with your server URL (https://mcp.docs.salesforce.com/, or the path-namespaced https://docs.salesforce.com/mcp/). Every example below is a real call against the live server.
Initialize a session
curl -X POST $ENDPOINT \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": { "name": "curl", "version": "0" }
}
}'
Capture mcp-session-id from the response headers and pass it as -H 'mcp-session-id: <id>' on subsequent requests.
list
{
"jsonrpc": "2.0", "id": 2, "method": "tools/call",
"params": {
"name": "list",
"arguments": {}
}
}
search — ranked retrieval
{
"jsonrpc": "2.0", "id": 3, "method": "tools/call",
"params": {
"name": "search",
"arguments": {
"query": "calculated field",
"collection": "tableau",
"version": "current",
"locale": "en-us",
"pageSize": 5
}
}
}
Add "format": "text" (or "markdown" / "html") to include document bodies. Omit it for triage queries (smaller responses, ranking only).
Multi-collection retrieval
The same five tools work across all six collections — switch the collection argument. Each collection has its own +guides:<slug> vocabulary (read it from list).
Admin — scope to a product area with a +guides: filter:
{
"jsonrpc": "2.0", "id": 4, "method": "tools/call",
"params": {
"name": "search",
"arguments": { "query": "+guides:commerce order management", "collection": "admin", "locale": "en-us" }
}
}
Admin also indexes a Salesforce quarterly-release number — add +release:<n> (e.g. 262) to pin a release:
{ "name": "search", "arguments": { "query": "+guides:commerce +release:262 order management", "collection": "admin", "locale": "en-us" } }
MuleSoft — natural-language answer with citations:
{
"jsonrpc": "2.0", "id": 5, "method": "tools/call",
"params": {
"name": "answer",
"arguments": { "query": "How do I configure the Amazon Bedrock connector?", "collection": "mulesoft", "locale": "en-us" }
}
}
Developer — chain co-occurring guides axes (brand × doc type) as bare boosts:
{
"jsonrpc": "2.0", "id": 6, "method": "tools/call",
"params": {
"name": "search",
"arguments": { "query": "+guides:marketing_cloud_ampscript +guides:reference string functions", "collection": "developer", "locale": "en-us" }
}
}
LegacyDeveloper — Apex / platform reference (one book per doc; use bare guides: boosts, never chained):
{
"jsonrpc": "2.0", "id": 7, "method": "tools/call",
"params": {
"name": "answer",
"arguments": { "query": "How do Apex trigger context variables work?", "collection": "legacydeveloper", "locale": "en-us" }
}
}
Release-preview retrieval (version: "next")
Tableau publishes a next channel documenting upcoming, not-yet-shipped behavior. Citations resolve to /release-preview/ URLs. Use current (the default) for behavior available today.
{
"jsonrpc": "2.0", "id": 8, "method": "tools/call",
"params": {
"name": "search",
"arguments": { "query": "Tableau Next", "collection": "tableau", "version": "next", "locale": "en-us" }
}
}
Localized content & locale routing
Collections carry localized slices (see each collection's locales[]). Target one explicitly, and the answer grounds in that language's documentation:
{
"jsonrpc": "2.0", "id": 9, "method": "tools/call",
"params": {
"name": "search",
"arguments": { "query": "bien arquitectado", "collection": "architect", "locale": "es-mx" }
}
}
Or leave locale at its default "auto": the server detects the question's language and routes to the matching slice when the collection has it, answering in the language you asked. A Spanish question routes to es-es and answers in Spanish:
{
"jsonrpc": "2.0", "id": 10, "method": "tools/call",
"params": {
"name": "answer",
"arguments": { "query": "¿Cómo puedo crear un campo calculado en Tableau Server?", "collection": "tableau", "locale": "auto" }
}
}
Collection-specific facets — Architect recency
The architect collection carries semi-structured date fields, so you can retrieve by when a document was last touched. updated is an indexed yyyymmdd token (wildcard-matchable); pill flags new / updated content.
"What changed in the last two months?" — OR the recent year-month wildcards (today is June 2026, so April–June):
{
"jsonrpc": "2.0", "id": 13, "method": "tools/call",
"params": {
"name": "search",
"arguments": { "query": "updated:202604* updated:202605* updated:202606*", "collection": "architect", "locale": "en-us" }
}
}
Use a leading + to require a month ("+updated:202605*"), or combine the +pill:new "what's new" flag with a topic ("+pill:new agentforce"). These facets are unique to architect; other collections ignore them.
fetch — direct lookup by id or url
Chain ids from a search / answer result, or pass public urls (not both). Pick format per use: text for triage/bulk, markdown for structure, html for raw.
{
"jsonrpc": "2.0", "id": 11, "method": "tools/call",
"params": {
"name": "fetch",
"arguments": {
"urls": ["https://help.tableau.com/current/pro/desktop/en-us/calculations_calculatedfields.htm"],
"format": "markdown"
}
}
}
explain — answer grounded in one document
Use when you already know which document holds the answer. Pass id (chained from a citation) or url.
{
"jsonrpc": "2.0", "id": 12, "method": "tools/call",
"params": {
"name": "explain",
"arguments": {
"query": "Does this article explain how to save a calculated field?",
"url": "https://help.tableau.com/current/pro/desktop/en-us/calculations_calculatedfields.htm"
}
}
}