Skip to main content
Glama
Mark425

smugmug-docs-mcp-server

by Mark425

SmugMug Docs MCP Server

This project creates a lightweight TypeScript MCP server that wraps the SmugMug API reference docs over stdio and can also call the live SmugMug API using credentials from the local secrets file.

What it provides

The server exposes three tools:

  • search_smugmug_docs(query) to search a bundled catalog of SmugMug docs topics

  • fetch_smugmug_doc(input) to fetch content for a docs page or docs path

  • smugmug_api_call(path, method, params) to call the live SmugMug API using pre-authorized OAuth credentials

Related MCP server: MkDocs MCP Server

Setup

  1. Install Node.js 20+.

  2. Install dependencies:

npm install
  1. Build the server:

npm run build
  1. Start it locally:

npm start

Running it from another project

The package exposes a smugmug-docs-mcp-server binary and ships prebuilt output, so any MCP client can launch it straight from GitHub without cloning:

npx --yes --package=git+https://github.com/Mark425/smugmug-docs-mcp-server.git#REVISION smugmug-docs-mcp-server

Pin REVISION to a specific commit so clients get a reproducible server.

npx re-clones and rebuilds the package on every launch, which takes roughly a minute and will exceed the startup timeout of some MCP clients. For anything you start regularly, install it once instead and point the client at the resulting smugmug-docs-mcp-server binary:

npm install -g git+https://github.com/Mark425/smugmug-docs-mcp-server.git#REVISION

typescript and @types/node stay in devDependencies, and dist/ is committed to the repository rather than built on install. npm does not install a package's dependencies before running its prepare script during npm install -g <git-url>, so an install-time build cannot work for this distribution method. Run npm run build and commit the result whenever you change src/.

Credentials

smugmug_api_call looks for credentials in the following order:

  1. SMUGMUG_API_KEY, SMUGMUG_API_SECRET, SMUGMUG_ACCESS_TOKEN, and SMUGMUG_TOKEN_SECRET environment variables.

  2. The file named by SMUGMUG_SECRETS_FILE.

  3. secrets.txt inside the directory named by SMUGMUG_WORKSPACE_ROOT.

  4. secrets.txt in the current working directory.

The secrets file uses this format:

smug mug api key: YOUR_API_KEY
smug mug secret: YOUR_API_SECRET
smug mug access token: YOUR_ACCESS_TOKEN
smug mug token secret: YOUR_TOKEN_SECRET

The access token and token secret are obtained once through SmugMug's OAuth 1.0a non-web flow:

  1. Request a token from https://api.smugmug.com/services/oauth/1.0a/getRequestToken using your API key and secret.

  2. Open the returned authorization URL in a browser and authorize the application.

  3. Enter the six-digit verification code when requesting the access token from https://api.smugmug.com/services/oauth/1.0a/getAccessToken.

Access tokens do not expire unless revoked. The server uses them to sign each API request and does not perform the interactive authorization flow itself.

Prefer SMUGMUG_SECRETS_FILE over the credential environment variables when configuring an MCP client: MCP configuration files are typically committed to a repository or stored in a shared user config, so keeping the credentials in an ignored secrets file avoids checking them in.

Option 4 exists for backwards compatibility, but relying on it is fragile — MCP clients start the server with whatever working directory they choose, and some (such as GitHub Copilot CLI) provide no way to set it. Set SMUGMUG_SECRETS_FILE explicitly instead.

For limited public-read endpoints, SmugMug also supports an APIKey query parameter. The live API tool does not add that parameter automatically; authenticated requests use OAuth.

How to use it in VS Code

This repository includes a VS Code MCP configuration in .vscode/mcp.json, so the server can be launched directly from the workspace.

1. Make sure the server is built

Run:

npm run build

2. Open the workspace in VS Code

The server should be discoverable through the MCP configuration in .vscode/mcp.json.

3. Connect the MCP server

In VS Code, use the MCP or chat tool integration to connect to the server defined in .vscode/mcp.json.

Once connected, you can ask the agent to use tools such as:

  • "Search the SmugMug docs for albums"

  • "Fetch the SmugMug API overview page"

  • "Call the live SmugMug API at /api/v2/user"

4. Optional: use your credentials

If you want the live API tool to work, place the complete OAuth credential set in secrets.txt using the format shown in Credentials.

See Credentials for the other supported locations.

Example tool calls

Search docs

{
  "query": "albums"
}

Fetch a docs page

{
  "input": "tutorial/api-key.html"
}

Call the live API

{
  "path": "/api/v2/user",
  "method": "GET"
}

Available Tools

3 tools
fetch_smugmug_docA

Fetch content from a SmugMug docs page or a known docs path.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYesA full URL or a docs path such as tutorial/api-key.html.

TDQS

A3.5/5.0
Behavior2/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 only says 'fetch content,' which is straightforward, but it does not disclose what the returned content looks like, error behavior, or any rate limits. It lacks context beyond the basic action, leaving the agent uncertain about the output format or failure modes.

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?

The description is a single sentence with no redundant words. It is front-loaded with the verb and resource, making it efficient and easy to scan.

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?

The tool is simple with one parameter and no output schema, so the description does not need to explain return values fully. However, it does not mention what the 'content' is (e.g., raw HTML, text) or the expected behavior for invalid paths. For a read-only fetch tool, it is minimally complete but has clear gaps.

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% for the single parameter 'input', which has a clear description ('A full URL or a docs path such as tutorial/api-key.html'). The tool description essentially repeats this information, adding no new semantic value. The baseline of 3 applies.

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 tool's function: 'Fetch content from a SmugMug docs page or a known docs path.' It uses a specific verb (fetch) and a specific resource (SmugMug docs page/path), and it is distinct from sibling tools like search_smugmug_docs and smugmug_api_call.

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 (when you need to fetch docs content from a URL or path) but provides no explicit guidance on when to use this vs. search_smugmug_docs or smugmug_api_call. There are no exclusions or alternative suggestions, so it only meets the 'implied usage' level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_smugmug_docsA

Search the bundled SmugMug API documentation catalog.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query such as album, image, auth, or user.

TDQS

A3.9/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 the full burden. It states the action ('Search'), which implies a read-only operation, but does not disclose what the output looks like, whether it searches full text or just metadata, or any limits. For a simple search tool this is acceptable, but it leaves some behavioral details implicit.

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?

The description is a single, front-loaded sentence that clearly states the tool's purpose without unnecessary words. It earns its place by being concise and immediately informative.

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?

Given the tool's simplicity (one parameter, no output schema), the description is reasonably complete. However, it does not specify what the search returns (e.g., a list of document ID's, snippets), which could be important for an agent deciding how to proceed. The absence of any return-value guidance leaves a minor gap.

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?

The input schema has 100% description coverage for the single parameter 'query', providing examples like 'album, image, auth, or user'. The tool description itself adds no additional parameter meaning beyond what the schema already provides, so the baseline score of 3 applies.

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 a specific verb ('Search') and identifies the resource ('the bundled SmugMug API documentation catalog'). It clearly distinguishes from sibling tools like fetch_smugmug_doc, which likely retrieves a specific document, and smugmug_api_call, which makes API calls. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the tool is for searching documentation, which provides context for when to use it (when the agent needs to locate docs). However, it does not explicitly mention when to avoid it or prefer an alternative like fetch_smugmug_doc. The sibling names offer hints, but the description itself lacks explicit exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

smugmug_api_callB

Call the live SmugMug API using pre-authorized OAuth credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesThe API path such as /api/v2!authschema or /api/v2/user
methodNoHTTP method to use (GET by default).
paramsNoOptional query parameters to include.

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description alone must disclose behavioral traits. It mentions pre-authorized OAuth credentials but does not explain potential side effects of using methods like POST/DELETE, rate limits, error behavior, or that the tool can perform mutations depending on the method parameter. This is a significant transparency gap for a tool that can potentially alter data.

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?

The description is a single, efficient sentence that immediately conveys the core purpose. It contains no filler and is front-loaded with the key information (live API call).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description should explain what the tool returns or how the response is structured, but it does not. It also lacks any mention of possible errors, pagination, or how the response relates to the requested path. Given the tool's generic API-call nature, this is insufficient for an agent to fully understand invocation consequences.

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?

The input schema has 100% description coverage, with each parameter (path, method, params) already explained. The tool description adds no additional meaning beyond the schema, so the baseline of 3 is appropriate. It does not clarify parameter formatting or provide examples beyond what the schema already shows.

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 tool calls the live SmugMug API with pre-authorized credentials, which is a specific verb and resource. It distinguishes itself from the sibling documentation tools (search_smugmug_docs, fetch_smugmug_doc) by focusing on live API interaction rather than doc retrieval.

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 phrase 'live SmugMug API' implies it should be used when making actual API requests rather than consulting docs, and the sibling names help infer that. However, there is no explicit statement about when to use this tool vs the documentation tools, nor any exclusions or prerequisite conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 3 tool updatesv1.0.0
    • First observedfetch_smugmug_doc
    • First observedsearch_smugmug_docs
    • First observedsmugmug_api_call

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: searching the docs catalog, fetching a specific doc page, and making a live API call. No ambiguity between them.

Naming Consistency3/5

The first two tools follow a verb_noun pattern (search_smugmug_docs, fetch_smugmug_doc), but the third (smugmug_api_call) flips to noun_verb. Also, singular 'doc' and plural 'docs' are inconsistent.

Tool Count4/5

Three tools is on the lower end of the typical range, but it's well-scoped for a documentation-focused server. Each tool earns its place without unnecessary bloat.

Completeness5/5

The search and fetch tools cover the full documentation workflow—finding and retrieving content. The API call tool adds a complementary capability, leaving no obvious dead ends or missing core operations.

Maintenance

ActivitySlowing
ResponsivenessUnresponsive

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

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/Mark425/smugmug-docs-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server