Skip to main content
Glama

SCP Local MCP Server

A Model Context Protocol (MCP) server that provides AI assistants like Claude with secure access to customer data through the Shopper Context Protocol (SCP).

What is this?

This MCP server acts as a bridge between AI assistants and e-commerce systems that implement the SCP protocol. It enables Claude Desktop and other MCP clients to:

  • šŸ” Securely authorize access to customer accounts using OAuth 2.0 with PKCE

  • šŸ“¦ Retrieve order history, loyalty points, active offers, and shopping preferences

  • šŸ” Discover SCP endpoints for merchants via DNS or well-known URIs

  • šŸ”’ Store and manage encrypted authentication tokens locally

All customer data requests are authenticated and authorized by the merchant's SCP server, ensuring privacy and security.

Related MCP server: ACP Commerce MCP Server

Quick Start with npx

The easiest way to use this server is with npx - no installation required!

With Claude Desktop

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "scp": {
      "command": "npx",
      "args": ["-y", "@shoppercontextprotocol/local-mcp-server"]
    }
  }
}

On Windows, the config file is located at: %APPDATA%\Claude\claude_desktop_config.json

Testing with a Local Development Server

If you're developing an SCP server locally, you can configure the MCP server to point to your test endpoint:

{
  "mcpServers": {
    "scp": {
      "command": "npx",
      "args": ["-y", "@shoppercontextprotocol/local-mcp-server"],
      "env": {
        "SCP_TEST_ENDPOINT": "http://localhost:8787/v1"
      }
    }
  }
}

This bypasses DNS discovery and directs all requests to your local test server.

Installation (Alternative)

For development or if you prefer a local installation:

# Install globally
npm install -g @shoppercontextprotocol/local-mcp-server

# Or install locally for development
git clone <repository>
cd local_mcp
npm install
npm run build

Usage

With Claude Desktop (Local Installation)

{
  "mcpServers": {
    "scp": {
      "command": "scp-mcp-server"
    }
  }
}

Or with a local build:

{
  "mcpServers": {
    "scp": {
      "command": "node",
      "args": ["/absolute/path/to/local_mcp/dist/index.js"]
    }
  }
}

Direct Usage

# If installed globally
scp-mcp-server

# Or with local build
npm start

Development

npm run dev    # Watch mode
npm run build  # Production build
npm test       # Run tests

Configuration

The server stores configuration in ~/.scp/config.json. It will be created automatically on first run with these defaults:

{
  "dns_resolver": "1.1.1.1",
  "dns_cache_ttl": 86400,
  "poll_interval": 2,
  "max_poll_attempts": 150,
  "token_refresh_threshold": 300,
  "request_timeout": 30000,
  "demo_mode": true,
  "demo_endpoint": "http://localhost:8787/v1"
}

Configuration Options

  • dns_resolver: DNS server to use for SCP endpoint discovery (default: Cloudflare's 1.1.1.1)

  • dns_cache_ttl: How long to cache discovered endpoints in seconds (default: 24 hours)

  • poll_interval: Seconds between polling attempts during OAuth flow (default: 2)

  • max_poll_attempts: Maximum number of polling attempts (default: 150 / 5 minutes)

  • token_refresh_threshold: Seconds before expiry to refresh tokens (default: 300 / 5 minutes)

  • request_timeout: HTTP request timeout in milliseconds (default: 30000 / 30 seconds)

  • demo_mode: Enable demo mode (default: true)

  • demo_endpoint: Endpoint to use in demo mode (default: http://localhost:8787/v1)

Testing with a Development Server

There are multiple ways to point the MCP server to your test SCP server:

Set SCP_TEST_ENDPOINT when running the server:

# Direct usage
SCP_TEST_ENDPOINT=http://localhost:8787/v1 scp-mcp-server

# With npx
SCP_TEST_ENDPOINT=http://localhost:8787/v1 npx @shoppercontextprotocol/local-mcp-server

# In Claude Desktop config (see Quick Start section above)

Option 2: Demo Mode Configuration

Edit ~/.scp/config.json:

{
  "demo_mode": true,
  "demo_endpoint": "http://localhost:8787/v1"
}

By default, demo mode is enabled and directs all SCP requests to the demo endpoint. This is useful for local testing without needing DNS records.

Option 3: Production Mode

To use real DNS-based discovery for production merchants:

{
  "demo_mode": false
}

Priority Order:

  1. SCP_TEST_ENDPOINT environment variable (highest priority)

  2. Demo mode configuration

  3. DNS-based discovery (lowest priority)

Data Storage

  • Tokens: ~/.scp/tokens.db (SQLite, encrypted)

  • Config: ~/.scp/config.json

MCP Tools

  • scp_authorize - Authorize access to a merchant

  • scp_check_authorization - Check authorization status

  • scp_revoke_authorization - Revoke access to a merchant

  • scp_discover - Discover SCP endpoint for a domain

MCP Resources

  • scp://{domain}/orders - Order history

  • scp://{domain}/loyalty - Loyalty status

  • scp://{domain}/offers - Active offers

  • scp://{domain}/preferences - Customer preferences

  • scp://{domain}/intents - Shopping intents

How to Use in Claude Desktop

After adding the MCP server to your Claude Desktop config and restarting Claude, you can interact with SCP-enabled merchants:

First Time: Authorize Access

Can you help me authorize access to my Boot Barn account? 
My email is customer@example.com

Claude will use the scp_authorize tool to:

  1. Discover the SCP endpoint for bootbarn.com

  2. Initiate OAuth authorization with a magic link

  3. The magic link will be sent to your email

  4. Poll for authorization completion

  5. Store encrypted tokens locally

Access Your Data

Once authorized, you can ask Claude to retrieve your data:

What are my recent Boot Barn orders?
How many loyalty points do I have at Boot Barn?
Do I have any active offers or coupons?

Claude will automatically:

  • Use the stored authorization tokens

  • Refresh tokens if they're about to expire

  • Fetch data from the merchant's SCP server

  • Present the information in a helpful format

Check Authorization Status

Am I authorized with Boot Barn?

Revoke Access

Revoke my Boot Barn authorization

Example Workflow

Here's a complete example of using SCP in Claude Desktop:

You: "Help me authorize with acmestore.com using customer@example.com"

Claude: Initiates OAuth flow, sends magic link to email

You: Clicks magic link in email

Claude: Completes authorization and confirms success

You: "What orders have I placed?"

Claude: Retrieves and displays order history

You: "Do I have any active coupons?"

Claude: Shows available offers and promotions

How It Works: Initialization Instructions

The SCP MCP Server provides built-in instructions to Claude during the initialization phase, ensuring it knows how to properly use the SCP tools without any additional prompting.

Automatic Guidance

When Claude Desktop connects to the SCP server, it automatically receives instructions that tell it to:

  1. Always check authorization first - Before accessing any customer data, Claude will check if you're authorized with the merchant

  2. Ask for your email - If not authorized, Claude will ask for your email address to start the OAuth flow

  3. Request all necessary scopes - Claude requests comprehensive permissions upfront: orders, loyalty, preferences, intent:read, intent:create

  4. Explain the magic link process - Claude tells you to check your email for the authorization link

  5. Handle errors gracefully - If something goes wrong, Claude knows how to guide you through fixing it

Why This Matters

This automatic initialization means:

  • āœ… No manual configuration needed - Claude knows how to use SCP tools immediately

  • āœ… Consistent behavior - Every conversation follows the same authorization workflow

  • āœ… Better user experience - Claude proactively handles authorization before trying to access data

  • āœ… Fewer errors - Reduces "Not authorized" errors by checking authorization first

The Initialization Flow

1. Claude Desktop starts and reads claude_desktop_config.json
2. Spawns the SCP MCP server (node dist/index.js or npx)
3. Sends initialize request to the server
4. Server responds with:
   - Server info (name, version)
   - Instructions for the LLM
   - Capabilities (tools, resources)
5. Claude reads the instructions and knows:
   āœ“ Check authorization first
   āœ“ Ask for email when needed
   āœ“ Request all scopes upfront
   āœ“ Create intents when users express shopping goals
6. Server is ready, Claude is ready with full context
7. User asks: "Show me my orders"
8. Claude follows the instructions:
   - Checks authorization
   - Asks for email if needed
   - Initiates OAuth flow
   - Retrieves and displays orders

Example Instructions Provided

During initialization, Claude receives these instructions:

IMPORTANT WORKFLOW:

1. AUTHORIZATION REQUIRED FIRST
   Before accessing ANY customer data, you MUST authorize with the merchant domain.
   
   Check authorization:
   - scp_check_authorization(domain="acmestore.com")
   
   If not authorized:
   - Ask user: "What email do you use with [Merchant]?"
   - Call: scp_authorize(domain="...", email="...", scopes=[...])
   - Tell user: "Please check your email for a magic link"

2. ACCESSING DATA
   Once authorized, use these tools:
   - scp_get_orders(domain="...") - Order history
   - scp_get_loyalty(domain="...") - Loyalty status
   - scp_get_preferences(domain="...") - Saved preferences
   - scp_get_intents(domain="...") - Shopping intents

3. CREATING INTENTS
   When user expresses a shopping goal, create an intent:
   - scp_create_intent(domain="...", base_intent="...", context={...})

REMEMBER:
āœ… ALWAYS check authorization before accessing data
āœ… Request comprehensive scopes upfront
āœ… Create intents when users express shopping goals
āŒ NEVER access data without authorization first

This ensures every interaction with the SCP server follows best practices and provides a smooth, secure experience for users.

Available Tools

11 tools
scp_authorizeA

BEFORE USING THIS ENSURE THE DOMAIN SUPPORTS SCP BY CALLING scp_discover FIRST. Authorize access to a merchant's customer context via SCP. Must be called before accessing any customer data. IMPORTANT: You must ask the user for their REAL email address - never use placeholder emails like user@example.com. Ask: "What email address do you use with [Merchant]?" and wait for their response.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesMerchant domain (e.g., 'acmestore.com')
emailYesCustomer's REAL email address (must ask user for this - never use example.com or placeholder emails)
scopesYesRequested scopes (e.g., ['orders', 'loyalty', 'intent:read']). Best practice: request all needed scopes upfront.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes critical behavioral traits: the prerequisite call to scp_discover, the requirement to ask for a real email address (not placeholders), and the instruction to wait for user response. However, it lacks details on rate limits, error handling, or what happens after authorization (e.g., token storage).

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 appropriately sized and front-loaded with critical prerequisites and purpose. Every sentence earns its place: the first covers prerequisites, the second states the core action, and the third provides essential user interaction guidance. However, the email instruction is somewhat verbose and could be more streamlined.

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 no annotations and no output schema, the description does well to cover prerequisites, purpose, and user interaction requirements. It adequately explains the tool's role in the SCP flow. However, it lacks details on return values (e.g., what authorization success looks like) and doesn't mention potential side effects or error conditions, leaving some gaps for a mutation tool.

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 100%, providing full parameter documentation. The description adds minimal value beyond the schema: it reinforces the email requirement ('REAL email address') and mentions scopes best practice ('request all needed scopes upfront'), but doesn't explain parameter interactions or provide additional semantic context. Baseline 3 is appropriate given high schema coverage.

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 specific action ('Authorize access to a merchant's customer context via SCP') and resource ('customer context'), distinguishing it from siblings like scp_check_authorization (verification) or scp_revoke_authorization (removal). It explicitly mentions this must be called before accessing customer data, establishing its unique role in the authorization flow.

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?

The description provides explicit when-to-use guidance: 'BEFORE USING THIS ENSURE THE DOMAIN SUPPORTS SCP BY CALLING scp_discover FIRST' and 'Must be called before accessing any customer data.' It also implicitly suggests alternatives by naming scp_discover as a prerequisite and distinguishing from other data-access tools in the sibling list.

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

scp_check_authorizationC

Check if authorized with a merchant domain

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesMerchant domain

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool checks authorization status but does not explain what 'authorized' entails, such as required permissions, authentication methods, or the response format. This leaves significant gaps in understanding the tool's behavior, warranting a score of 2.

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, efficient sentence: 'Check if authorized with a merchant domain.' It is front-loaded and wastes no words, making it easy to parse. However, it could be slightly more informative without sacrificing brevity, so it scores a 4.

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?

Given the lack of annotations and output schema, the description is incomplete for a tool that checks authorization status. It does not explain what 'authorized' means in this context, the expected return values, or error conditions. For a tool with potential security implications, this is inadequate, resulting in a score of 2.

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 the 'domain' parameter clearly documented as 'Merchant domain.' The description adds no additional meaning beyond this, as it does not elaborate on the parameter's usage or constraints. Given the high schema coverage, the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Check if authorized with a merchant domain.' It specifies the verb ('Check') and resource ('authorized with a merchant domain'), making the action understandable. However, it does not differentiate this tool from siblings like 'scp_authorize' or 'scp_revoke_authorization,' which limits its score to 4.

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 provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, such as needing prior authorization, or suggest when to choose it over siblings like 'scp_authorize' for authorization actions. This lack of contextual direction results in a score of 2.

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

scp_create_intentA

Create a new shopping intent with a merchant. Domain must be authorized with intent:create scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
ai_assistantNoName of the AI assistant
base_intentYesNatural language description of the shopping goal
contextNoAdditional context about the intent
domainYesMerchant domain
mechanismNoHow the intent was createdconversational_ai
visibilityNoWho can see this intentmerchant_only

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 of behavioral disclosure. It mentions the authorization scope requirement, which is useful context. However, it lacks details on what 'create' entails (e.g., is it idempotent, does it return an ID, what happens on failure, rate limits, or permissions beyond scope). For a creation tool with no annotations, this leaves significant gaps in understanding its behavior.

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 front-loads the core purpose and includes the critical scope requirement. There is no wasted text, and it's structured to convey essential information without redundancy.

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 no annotations and no output schema, the description is moderately complete. It covers the purpose and a key prerequisite (authorization scope), but lacks details on behavioral traits, error handling, or return values. For a creation tool with 6 parameters and no structured safety hints, it should provide more context about what 'create' entails and the outcome.

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 100%, so the schema fully documents all 6 parameters. The description adds no additional parameter information beyond implying the 'domain' parameter relates to authorization. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, as the description doesn't add meaningful semantics beyond what's already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create a new shopping intent') and the target ('with a merchant'), which is specific and actionable. It distinguishes from siblings like scp_get_intents (read vs. create) and scp_update_intent (create vs. update). However, it doesn't fully explain what a 'shopping intent' entails beyond the scope requirement.

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 provides explicit context for when to use this tool: 'Domain must be authorized with intent:create scope.' This gives a clear prerequisite. It doesn't explicitly state when not to use it or name alternatives, but the scope requirement implies usage is conditional on authorization.

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

scp_discoverC

Discover SCP endpoint for a merchant domain via DNS

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesMerchant domain

TDQS

C2.9/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 full burden. It mentions DNS-based discovery but doesn't disclose behavioral traits like whether this is a read-only operation, what happens on failure, if there are rate limits, or what format the discovered endpoint information takes. For a discovery tool with zero annotation coverage, this leaves critical operational context unspecified.

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 communicates the core functionality without unnecessary words. It's appropriately sized for a simple discovery tool and front-loads the essential information. Every word earns its place.

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?

Given the tool's role in an SCP ecosystem with multiple sibling tools, the description is insufficiently complete. It doesn't explain how the discovered endpoint integrates with other tools (like scp_authorize), what the output contains, or why discovery is needed. With no annotations and no output schema, the description should provide more operational context for effective agent use.

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 100% with one parameter ('domain' described as 'Merchant domain'), so the schema already documents the parameter adequately. The description doesn't add meaningful semantic context beyond what the schema provides, such as domain format requirements or DNS lookup specifics. Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Discover') and target ('SCP endpoint for a merchant domain via DNS'), making the purpose understandable. It distinguishes from siblings by focusing on endpoint discovery rather than authorization, intent management, or data retrieval operations. However, it doesn't explicitly contrast with specific sibling tools.

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 provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing a merchant domain before other operations), when discovery is necessary, or what to do with the discovered endpoint. With multiple sibling tools for authorization and data operations, this lack of contextual guidance is a significant gap.

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

scp_get_intentsB

Get shopping intents from a merchant. Domain must be authorized first.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesMerchant domain
limitNoMaximum number of intents to return
statusNoFilter by status (e.g., ['active', 'in_progress'])

TDQS

B3.2/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 of behavioral disclosure. It mentions the authorization prerequisite, which is useful, but doesn't cover other aspects like rate limits, error handling, pagination, or what 'shopping intents' entail. For a read operation with no annotation coverage, this leaves significant gaps in understanding the tool's behavior.

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 two sentences, front-loaded with the core purpose and followed by a key prerequisite. Every word serves a purpose, with no redundancy or unnecessary elaboration, making it highly efficient and well-structured.

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?

Given the tool's complexity (retrieving merchant data with filtering), lack of annotations, and no output schema, the description is incomplete. It mentions authorization but omits details on return format, error cases, or how 'shopping intents' are defined. This leaves the agent with insufficient context for reliable use.

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 100%, meaning all parameters are documented in the schema. The description doesn't add any parameter-specific details beyond what's in the schema (e.g., it doesn't explain 'domain' authorization further or 'status' values). With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get shopping intents') and resource ('from a merchant'), making the purpose understandable. However, it doesn't explicitly differentiate this tool from sibling tools like 'scp_get_offers' or 'scp_get_orders', which might also retrieve merchant data, so it lacks full sibling distinction.

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 provides some usage context by stating 'Domain must be authorized first', implying a prerequisite. However, it doesn't specify when to use this tool versus alternatives like 'scp_get_offers' or 'scp_get_orders', nor does it mention any exclusions or detailed scenarios for use.

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

scp_get_loyaltyA

Get loyalty status and points from a merchant. Domain must be authorized first.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesMerchant domain

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 of behavioral disclosure. It mentions the authorization prerequisite, which adds some context, but it does not describe other behavioral traits such as what data is returned (e.g., format of loyalty status/points), error handling, rate limits, or authentication needs beyond the implied authorization. For a tool with zero annotation coverage, this is a significant gap in transparency.

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 appropriately sized and front-loaded with two concise sentences: the first states the purpose, and the second provides the key usage guideline. Every sentence earns its place by delivering essential information without waste, making it highly efficient and well-structured.

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 complexity (simple retrieval with one parameter), no annotations, and no output schema, the description is partially complete. It covers the purpose and a key prerequisite, but it lacks details on return values, error cases, or behavioral nuances. Without an output schema, the description should ideally explain what 'loyalty status and points' entails, but it does not, leaving gaps in completeness.

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 the 'domain' parameter documented as 'Merchant domain.' The description does not add any additional meaning beyond this, as it only references 'domain' in the context of authorization. Since the schema already fully describes the parameter, the baseline score of 3 is appropriate, as the description does not compensate but also does not detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get loyalty status and points from a merchant.' It specifies the action ('Get'), resource ('loyalty status and points'), and target ('merchant'), which is specific and informative. However, it does not explicitly differentiate this tool from sibling tools like 'scp_get_offers' or 'scp_get_orders', which might also retrieve merchant-related data, so it falls short of a perfect score.

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 provides clear context for usage with the statement: 'Domain must be authorized first.' This implies a prerequisite (authorization via tools like 'scp_authorize') and helps guide when to use this tool. However, it does not explicitly mention when not to use it or name alternatives (e.g., vs. 'scp_get_offers'), so it lacks full explicit guidance.

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

scp_get_offersA

Get active personalized offers from a merchant. Domain must be authorized first.

ParametersJSON Schema
NameRequiredDescriptionDefault
active_onlyNoOnly return active offers
domainYesMerchant domain

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 of behavioral disclosure. It mentions the authorization prerequisite, which adds some context, but does not cover other important traits such as whether this is a read-only operation, potential rate limits, error handling, or what the return format looks like. For a tool with no annotations, this leaves significant gaps in understanding its behavior.

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 two sentences, front-loaded with the main purpose and followed by a prerequisite. Every sentence earns its place by providing essential information without redundancy or fluff, making it efficient and well-structured.

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 no annotations and no output schema, the description is incomplete for a tool that likely returns data (offers). It covers the purpose and a key prerequisite but lacks details on return values, error cases, or behavioral nuances. However, the schema coverage is high, and the description is concise, making it minimally adequate but with 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 description coverage is 100%, so the schema already documents both parameters (domain and active_only) adequately. The description adds minimal value beyond the schema by implying the domain parameter's role in authorization, but does not provide additional syntax or format details. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'active personalized offers from a merchant', specifying what the tool does. It distinguishes from siblings like scp_get_intents or scp_get_orders by focusing on offers, but does not explicitly contrast with them. The purpose is specific and actionable, though not fully differentiated from all siblings.

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 provides clear context for when to use this tool by stating 'Domain must be authorized first', implying a prerequisite. It does not explicitly mention when not to use it or name alternatives among siblings, but the context is sufficient for basic usage guidance without being misleading.

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

scp_get_ordersA

Get order history from a merchant. Domain must be authorized first.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesMerchant domain
limitNoMaximum number of orders to return
offsetNoNumber of orders to skip
statusNoFilter by order status (e.g., ['delivered', 'shipped'])

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the authorization requirement, which is valuable context about access control. However, it doesn't describe other important behaviors like pagination handling (implied by limit/offset but not explained), rate limits, error conditions, or what format the order history returns. For a tool with 4 parameters and no output schema, more behavioral context would be helpful.

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 extremely concise with just two sentences that each serve a clear purpose: the first states the core functionality, and the second provides critical usage context. There's zero wasted language, and the most important information (what the tool does) comes first. This is an excellent example of efficient documentation.

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 has 4 parameters, no annotations, and no output schema, the description provides adequate but incomplete context. The authorization prerequisite is valuable, but missing details about return format, pagination behavior, error handling, and rate limits leave gaps. For a data retrieval tool with filtering capabilities, more complete context would help the agent understand what to expect from the operation.

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 schema description coverage is 100%, so all parameters are well-documented in the schema itself. The description doesn't add any additional parameter information beyond what's already in the schema descriptions. It mentions the domain parameter indirectly through the authorization requirement, but this doesn't enhance the parameter semantics beyond the schema's documentation. The baseline score of 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get order history') and target resource ('from a merchant'), making the purpose immediately understandable. It distinguishes this tool from siblings like scp_get_intents or scp_get_offers by specifying it retrieves order data rather than other merchant information. However, it doesn't specify whether this returns all historical orders or recent ones, which could help further differentiate from potential future tools.

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 provides clear context about when to use this tool by stating 'Domain must be authorized first,' which references the scp_authorize sibling tool. This establishes a prerequisite relationship. However, it doesn't explicitly mention when NOT to use this tool or provide alternatives for similar queries, such as when to use scp_get_intents instead for different merchant data.

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

scp_get_preferencesA

Get saved customer preferences (sizes, styles, addresses) from a merchant. Domain must be authorized first.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesMerchant domain

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 full burden. It mentions the authorization requirement, which is useful behavioral context. However, it doesn't disclose other traits like whether this is a read-only operation, potential rate limits, error conditions, or what the return format looks like (e.g., JSON structure). For a tool with zero annotation coverage, this leaves significant gaps.

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 concise sentences with zero waste: the first states the purpose with examples, and the second provides a critical prerequisite. Every word earns its place, and the information is front-loaded appropriately.

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 no annotations and no output schema, the description is minimally complete for a simple read operation. It covers the purpose and a key prerequisite, but lacks details on return values, error handling, or behavioral nuances that would be helpful for an agent invoking this tool.

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 100%, so the schema already documents the single 'domain' parameter. The description adds marginal value by reinforcing that it's a 'Merchant domain' and tying it to the authorization context, but doesn't provide additional syntax or format details beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and resource 'saved customer preferences' with specific examples (sizes, styles, addresses) and source (from a merchant). It distinguishes from siblings like scp_get_orders or scp_get_offers by focusing on preferences, but doesn't explicitly contrast them.

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?

It provides clear context with the prerequisite 'Domain must be authorized first', which implicitly suggests using scp_authorize or scp_check_authorization first. However, it doesn't explicitly name alternatives or specify when-not-to-use scenarios beyond the authorization requirement.

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

scp_revoke_authorizationC

Revoke authorization with a merchant domain

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesMerchant domain

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action is to 'revoke authorization', implying a destructive mutation, but doesn't clarify if this is permanent, reversible, requires specific permissions, or has side effects (e.g., impacting related intents or orders). This leaves significant gaps in understanding the tool's behavior.

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, clear sentence with no wasted words. It's front-loaded with the core action and target, making it efficient and easy to parse. Every part of the sentence contributes directly to understanding the tool's purpose.

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?

For a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't address what happens after revocation (e.g., success/failure responses, error conditions, or effects on sibling tools like orders or intents). Given the complexity implied by 'revoke' and the lack of structured data, more context is needed for effective use.

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 the 'domain' parameter clearly documented as 'Merchant domain'. The description doesn't add any extra meaning beyond this, such as format examples or domain validation rules. Given the high schema coverage, a baseline score of 3 is appropriate as the schema handles the parameter documentation adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('revoke authorization') and the target ('with a merchant domain'), which is specific and unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'scp_check_authorization' or 'scp_authorize', which would require mentioning what makes revocation distinct from checking or granting authorization.

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 provides no guidance on when to use this tool versus alternatives. For example, it doesn't specify if this should be used after checking authorization status with 'scp_check_authorization' or as an alternative to other tools. There's no mention of prerequisites, exclusions, or contextual cues for invocation.

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

scp_update_intentB

Update an existing shopping intent. Domain must be authorized with intent:write scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
add_milestoneNoAdd a milestone note
contextNoUpdated context
domainYesMerchant domain
intent_idYesIntent ID to update
statusNoNew status

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the authorization requirement ('Domain must be authorized with intent:write scope'), which is useful context about permissions. However, it doesn't describe what 'update' entails (e.g., partial vs. full updates, validation rules, error handling, or side effects), leaving significant gaps for a mutation tool.

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 front-loads the core action ('Update an existing shopping intent') and includes essential authorization context. Every word earns its place with zero waste, making it highly concise and well-structured.

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?

For a mutation tool with no annotations and no output schema, the description is incomplete. It covers the authorization prerequisite but lacks details on behavioral aspects (e.g., what happens on update, response format, error conditions). Given the complexity of updating an intent with multiple parameters, more context is needed to adequately guide an agent.

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 100%, so the schema already documents all 5 parameters thoroughly. The description adds no additional parameter semantics beyond what's in the schema (e.g., it doesn't explain relationships between parameters or provide examples). This meets the baseline of 3 when schema coverage is high.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Update') and resource ('existing shopping intent'), making the purpose unambiguous. It distinguishes from siblings like scp_create_intent by specifying 'existing' intent, but doesn't explicitly differentiate from other potential update operations. The domain authorization requirement adds specificity.

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 provides some usage context by stating 'Domain must be authorized with intent:write scope,' which implies when to use (after authorization) and prerequisites. However, it doesn't explicitly guide when to choose this tool versus alternatives like scp_create_intent or how it differs from other update-related operations. The guidance is implied rather than explicit.

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. 11 tool updatesv1.0.0
    • First observedscp_authorize
    • First observedscp_check_authorization
    • First observedscp_create_intent
    • First observedscp_discover
    • First observedscp_get_intents
    • First observedscp_get_loyalty
    • First observedscp_get_offers
    • First observedscp_get_orders
    • First observedscp_get_preferences
    • First observedscp_revoke_authorization
    • First observedscp_update_intent

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose targeting specific SCP operations like authorization, discovery, data retrieval (intents, loyalty, offers, orders, preferences), and intent management. No overlap exists; for example, scp_get_intents and scp_get_offers retrieve different data types, and scp_authorize vs. scp_check_authorization handle separate authorization steps.

Naming Consistency5/5

All tools follow a consistent scp_verb_noun naming pattern with snake_case throughout, such as scp_authorize, scp_get_intents, and scp_update_intent. This uniformity makes the tool set predictable and easy to navigate, with no deviations in style or structure.

Tool Count5/5

With 11 tools, the server is well-scoped for SCP operations, covering authorization, discovery, data retrieval, and intent management without being excessive. Each tool serves a specific function in the SCP workflow, making the count appropriate for the domain's needs.

Completeness4/5

The tool set provides comprehensive coverage for SCP interactions, including authorization lifecycle (authorize, check, revoke), discovery, and full CRUD for intents (create, get, update) and retrieval of customer data (loyalty, offers, orders, preferences). A minor gap is the lack of delete operations for intents or other data, but core workflows are well-supported.

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

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/shopper-context-protocol/scp-mcp-wrapper'

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