Unified Salesforce Documentation MCP Server
This server enables AI assistants to scrape, index, search, and export Salesforce documentation — including content behind Shadow DOMs and bot protection — for offline and RAG purposes.
Scrape a single page (
scrape_single_page): Extract clean Markdown from any Salesforce documentation URL, with automatic handling of headless browsing, Shadow DOM piercing, iframes, and dynamic SPA content.Bulk spider and index a guide (
mass_extract_guide): Provide a Table of Contents or root URL and the server discovers all linked pages, scrapes them concurrently (up to 100 pages), and stores chunked content in a local SQLite database.Search locally indexed docs (
search_local_docs): Run natural language or keyword queries against the local SQLite database to instantly retrieve relevant pre-scraped documentation chunks without re-running a browser.Read a full local document (
read_local_document): Instantly retrieve the full Markdown content of any previously indexed page directly from the local database, bypassing re-scraping.Export local documents (
export_local_documents): Compile an entire guide or multiple guides from the local database into a single concatenated Markdown file for offline reading or sharing.
Additional capabilities include bypassing bot protection (e.g., Akamai Bot Manager), maintaining a persistent offline knowledge base syncable via Git across teams, and integrating with AI assistants like Cursor and Claude Desktop via the Model Context Protocol (MCP).
Provides tools for scraping, searching, and extracting content from modern and legacy Salesforce documentation, including the ability to handle deeply nested Shadow DOMs and Lightning Web Components (LWC).
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Unified Salesforce Documentation MCP Serversearch local docs for LWC component lifecycle hooks"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Unified Salesforce Documentation MCP Server
A powerful Model Context Protocol (MCP) server that empowers LLMs to scrape, digest, and search through modern and legacy Salesforce documentation. It elegantly handles deeply nested Shadow DOMs, typical of Lightning Web Components (LWC), and legacy iframe-based documentation structures.
Features
Deep Shadow DOM Piercing: Bypasses 400KB+ of SPA boilerplate on
help.salesforce.comanddeveloper.salesforce.comto extract only the pure article Markdown.Bot-Protection Bypass: Includes a Stealth Architecture that transparently evades Akamai Bot Manager and other WAFs while perfectly executing Lightning Web Components to hydrate SPAs before extraction.
Hierarchical Spidering: Automatically queues and scrapes all related pages linked from a central guide using
mass_extract_guide.Offline RAG Capabilities: Chunks and indexes scraped Markdown into a local SQLite database (
docs.db) allowing for instantaneous local search usingsearch_local_docs.
Related MCP server: Spider MCP Server
Available Tools
scrape_single_page: Provide a Salesforce documentation URL. The server will use a headless browser (Puppeteer) to load the page, wait for dynamic content, pierce all shadow DOMs, and return clean Markdown.mass_extract_guide: Provide a "Table of Contents" or central guide URL. The server will extract the parent page, find all hierarchical child links, scrape them concurrently, chunk their content, and save them to a local SQLite database for offline querying.search_local_docs: Provide a natural language query (e.g.,LWC lifecycle hooks). The server queries the SQLite database using fuzzy SQL search to instantly return the best matching pre-scraped chunks of documentation.read_local_document: Rapidly extracts the full Markdown content of a documentation page that has already been indexed locally, instantly returning the content without needing to re-run headless Chromium to bypass CDNs.export_local_documents: Safely compile an entire guide (or multiple guides) stored in the offline SQLite database into a massive concatenated Markdown file exported directly to your local file system, without saturating LLM context windows or writing complex CLI scripts.
Quick Start (Using with AI Assistants)
MCP servers act as a bridge between an LLM and local tools. To actually use this server, you need to plug it into an AI coding assistant like Cursor or Claude Desktop.
The absolute easiest way to do this is to use npx, which will automatically download and run the latest version of the server from NPM.
1. Cursor (Recommended)
Open Cursor Settings -> Features -> MCP
Click + Add new MCP server
Configure the settings:
Type:
commandName:
unified-sf-docsCommand:
npx -y unified-sf-docs-mcp
Click Save. Cursor will instantly download the package and surface the 5 new tools to the Cursor Agent.
2. Claude Desktop
Open the Claude Desktop configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Add the following entry to your
mcpServersobject:
{
"mcpServers": {
"unified-sf-docs": {
"command": "npx",
"args": [
"-y",
"unified-sf-docs-mcp"
],
"env": {
"SF_DOCS_DB_DIR": "/absolute/path/to/your/private/github/repository"
}
}
}
}Restart Claude Desktop. The tools will now be available when talking to Claude!
3. Git-Backed Persistence (Team Sharing & Vector Syncing)
By default, the SQLite database is securely stored entirely offline at ~/.unified-sf-docs-mcp/salesforce-docs.db.
If you want to sync your scraped AI Knowledge Base across multiple computers, or share a pre-scraped docs.db vector database with a private engineering team:
Create a Private Git Repository (e.g. on GitHub). Note: Keep it private to avoid distributing Salesforce's copyrighted material publicly.
Clone it to your local machine (e.g.
/Users/todd/my-private-sf-kb).Add the
SF_DOCS_DB_DIRenvironment variable to your Cursor or Claude Desktop MCP settings, pointing to your cloned folder.Run
mass_extract_guidevia your AI to scrape the documentation. The 100MB+salesforce-docs.dbwill be securely created inside your Git repository, ready to be committed and pushed!
Local Development & Testing
If you want to modify the source code yourself, you can point your AI assistant to a local installation instead of using npx:
Clone the Repository:
git clone https://github.com/tmtrevisan/unified-sf-docs-mcp.git cd unified-sf-docs-mcpInstall & Build:
npm install && npm run build(Note: The server runs from the compiled
/distdirectory, so building is required).
You can use the provided test scripts to verify the core functionality or the scraper against different Salesforce URL layouts:
# Test the database, chunking, and search functionality
npx tsx tests/test-core.js
# Test the robust Shadow DOM scraper against 4 different URL permutations
npx tsx tests/test-all.jsUpdate your MCP config:
Type:
commandCommand:
node /ABSOLUTE/PATH/TO/unified-sf-docs-mcp/dist/index.js
Available Tools
5 toolsexport_local_documentsA
Export all matching offline documentation pages concatenated into a single Markdown file on your local machine.
| Name | Required | Description | Default |
|---|---|---|---|
| outputPath | Yes | Absolute file path to save the .md file. | |
| urlPrefix | No | Filter to URLs starting with this. | |
| category | No | Filter by category. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the core action (concatenating and exporting to a local file) but omits important behaviors like overwrite policy, directory creation, handling of no matches, and file format specifics. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no redundant words, front-loaded with key action. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple file export tool with 3 well-documented parameters, the description covers the main idea. Minor gaps (e.g., behavior on existing file) do not significantly impair understanding for most agents.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with clear parameter descriptions. The tool description's phrase 'all matching' reinforces filtering but adds no new meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('export'), the resource ('offline documentation pages'), and the result ('concatenated into a single Markdown file on your local machine'). It distinguishes from siblings like read_local_document (single page) and mass_extract_guide (likely batch extraction without concatenation).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool instead of alternatives (e.g., mass_extract_guide, search_local_docs). The description does not mention context, prerequisites, or when to avoid using it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mass_extract_guideA
Spiders a root Salesforce documentation page, extracts hierarchical links, and scrapes them in bulk. Stores contents in a local SQLite database for later searching.
| Name | Required | Description | Default |
|---|---|---|---|
| rootUrl | Yes | The Table of Contents or landing page. | |
| maxPages | No | Maximum number of pages to extract (default 20, max 100). | |
| category | No | ||
| matchKeyword | No | Optional substring. If provided, the crawler will prioritize scraping child links containing this string in their URL. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool stores contents in a local SQLite database for later searching, which is a key behavioral trait beyond the input schema. However, it does not address side effects like overwriting data, rate limits, or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences with no waste. Front-loaded with the primary verb 'Spiders'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a spidering and bulk scraping tool without output schema, the description adequately explains the process and storage. It could be more complete by noting the relationship to sibling tools (e.g., search_local_docs for retrieval), but it is still sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (75%). The tool description does not add parameter-specific details beyond the schema; it only explains the overall process. For the undocumented 'category' parameter, neither schema nor description provides guidance, so the description does not compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('spiders', 'extracts', 'scrapes', 'stores') and clearly identifies the resource (Salesforce documentation page) and the bulk hierarchical action. It distinguishes from siblings like scrape_single_page (single page) and export/read/search local docs (different operations).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for bulk extraction from a root page but does not explicitly state when to use this tool versus alternatives (e.g., scrape_single_page for a single page). No when-not or exclusion criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_local_documentA
Read the full markdown content of a Salesforce documentation page that has already been extracted into the local SQLite database.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The exact URL of the document to read, obtained from search_local_docs or mass_extract_guide |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates a read-only operation ('Read the full markdown content') with no side effects. With no annotations provided, it carries the full burden and does so adequately, though it could mention error handling (e.g., missing URL) or output format more explicitly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence conveys the purpose clearly without any unnecessary words or repetition. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool is simple, the description does not explicitly state that the return value is the markdown content as a string, nor what happens if the URL is not found. Given no output schema, this information would help the agent understand the result format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage. The parameter description adds valuable context by specifying that the URL should be obtained from search_local_docs or mass_extract_guide, which clarifies the source beyond the schema's minimal description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it reads markdown content of a Salesforce documentation page from the local SQLite database. It distinguishes itself from siblings like export_local_documents, mass_extract_guide, scrape_single_page, and search_local_docs by specifying the action (read) and the source (already extracted).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after extraction by stating 'already been extracted,' and the parameter description hints at obtaining URLs from search or mass_extract. However, it lacks explicit guidance on when to use this tool versus alternatives, and no when-not-to-use information is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrape_single_pageA
Scrape a single Salesforce documentation page. Returns markdown. If you do not know the exact URL, you should first use a Web Search tool (like Brave or DuckDuckGo) to search for 'site:developer.salesforce.com/docs [topic]' or 'site:help.salesforce.com [topic]', then pass the retrieved URL here.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| category | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states the tool scrapes a page and returns markdown, but does not disclose error handling, rate limits, or authentication requirements. This is adequate but lacks richness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences cover the function and crucial usage guidance. No filler; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool simplicity (2 params, no nested objects, no output schema), the description covers the main usage. It could mention the optional 'category' parameter or expected markdown structure, but overall it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%; the description adds meaning to 'url' by specifying it must be a Salesforce documentation URL and advising how to find it. However, 'category' is entirely undocumented, leaving a gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool scrapes a single Salesforce documentation page and returns markdown. It specifies the resource (Salesforce docs) and the output format, distinguishing it from siblings which deal with local documents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs the agent to use a web search tool if the exact URL is unknown, providing specific search queries. This gives clear guidance on when to use this tool versus search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_local_docsC
Search locally extracted Salesforce documentation in the SQLite database.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| maxResults | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description only states it searches without disclosing behavior like full-text search, exact match, pagination, or performance implications. The agent lacks information on what the tool actually does internally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no fluff. However, it is not front-loaded with the most critical information like parameter requirements or return type. Still, conciseness is adequate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, no annotations, and only two parameters, the description is severely incomplete. It does not explain return values, result format, ranking, or edge cases, making it inadequate for an agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description adds no meaning to the 'query' and 'maxResults' parameters. The agent only has the parameter names, which are insufficient for correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Search' and the resource 'locally extracted Salesforce documentation in the SQLite database'. It distinguishes the tool from siblings like 'read_local_document' which implies reading a specific document.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide when to use this tool versus alternatives. No explicit context or exclusion is given. Siblings like 'mass_extract_guide' or 'read_local_document' are not referenced for differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Tools have distinct purposes, but there is slight overlap between 'export_local_documents' and 'mass_extract_guide', as both involve extracting documentation content. Descriptions help differentiate, but an agent might be uncertain which to use for a given task.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., export_local_documents, search_local_docs), making it predictable and easy to understand.
Five tools cover the core operations for Salesforce documentation (extraction, reading, searching, export) without being excessive or sparse, fitting the server's purpose well.
The tool set covers essential documentation workflows: bulk/single extraction, reading, searching, and export. A minor gap is the lack of a tool to list all available documents in the local database, but agents can work around this using search.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Versioned documentation registry and semantic search for AI tools and coding assistants.
Cloud scraping & crawling API for AI agents. Turn any URL into clean, LLM-ready markdown.
Provide your AI coding tools with token-efficient access to up-to-date technical documentation for…
Scrape, crawl, map & search the web. Open-source, self-hostable Rust crawler & search for AI agents.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceScrapes and indexes documentation websites to provide AI assistants with searchable access to documentation content, API references, and code examples through configurable URL crawling.
- FlicenseNot gradedqualityDmaintenanceEnables crawling and extracting clean content from documentation websites with optional LLM-powered analysis for intelligent summaries, code example extraction, and content classification.
- AlicenseNot gradedqualityCmaintenanceEnables Salesforce developers to create code and configuration using local documentation, with optional semantic search.151MIT
- FlicenseNot gradedqualityDmaintenanceScrapes, indexes, and serves Salesforce Architect documentation locally, enabling fast offline RAG-powered search and retrieval for AI coding assistants.
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/TMTrevisan/unified-sf-docs-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server