Skip to main content
Glama
TMTrevisan

Unified Salesforce Documentation MCP Server

by TMTrevisan

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.com and developer.salesforce.com to 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 using search_local_docs.

Related MCP server: Spider MCP Server

Available Tools

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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. Open Cursor Settings -> Features -> MCP

  2. Click + Add new MCP server

  3. Configure the settings:

    • Type: command

    • Name: unified-sf-docs

    • Command: npx -y unified-sf-docs-mcp

  4. Click Save. Cursor will instantly download the package and surface the 5 new tools to the Cursor Agent.

2. Claude Desktop

  1. Open the Claude Desktop configuration file:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

  2. Add the following entry to your mcpServers object:

{
  "mcpServers": {
    "unified-sf-docs": {
      "command": "npx",
      "args": [
        "-y",
        "unified-sf-docs-mcp"
      ],
      "env": {
        "SF_DOCS_DB_DIR": "/absolute/path/to/your/private/github/repository"
      }
    }
  }
}
  1. 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:

  1. Create a Private Git Repository (e.g. on GitHub). Note: Keep it private to avoid distributing Salesforce's copyrighted material publicly.

  2. Clone it to your local machine (e.g. /Users/todd/my-private-sf-kb).

  3. Add the SF_DOCS_DB_DIR environment variable to your Cursor or Claude Desktop MCP settings, pointing to your cloned folder.

  4. Run mass_extract_guide via your AI to scrape the documentation. The 100MB+ salesforce-docs.db will 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:

  1. Clone the Repository:

    git clone https://github.com/tmtrevisan/unified-sf-docs-mcp.git
    cd unified-sf-docs-mcp
  2. Install & Build:

    npm install && npm run build

    (Note: The server runs from the compiled /dist directory, 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.js
  1. Update your MCP config:

    • Type: command

    • Command: node /ABSOLUTE/PATH/TO/unified-sf-docs-mcp/dist/index.js

Available Tools

5 tools
export_local_documentsA

Export all matching offline documentation pages concatenated into a single Markdown file on your local machine.

ParametersJSON Schema
NameRequiredDescriptionDefault
outputPathYesAbsolute file path to save the .md file.
urlPrefixNoFilter to URLs starting with this.
categoryNoFilter by category.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
rootUrlYesThe Table of Contents or landing page.
maxPagesNoMaximum number of pages to extract (default 20, max 100).
categoryNo
matchKeywordNoOptional substring. If provided, the crawler will prioritize scraping child links containing this string in their URL.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe exact URL of the document to read, obtained from search_local_docs or mass_extract_guide

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
categoryNo

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
maxResultsNo

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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

A3.7/5.0
Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count5/5

Five tools cover the core operations for Salesforce documentation (extraction, reading, searching, export) without being excessive or sparse, fitting the server's purpose well.

Completeness4/5

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

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

Appeared in Searches

Latest Blog Posts

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