Skip to main content
Glama

SOR MCP Server - Context Efficiency Testing

A sample MCP server designed to test context efficiency with LLM clients. Contains 174 backend SOR (System of Record) CRUD tools but exposes only 3 meta-tools to clients.

The Problem

When you expose many tools to an LLM, each tool's name, description, and schema consumes context tokens. With 174 tools and complex schemas, this could easily be 50,000+ tokens just for tool definitions.

Related MCP server: MCPLens

The Solution

Instead of exposing all 174 tools directly, this server exposes only 3 meta-tools:

Tool

Purpose

search_tools

Search through tools, returns only relevant ones with filtered schemas

execute_tool

Execute any tool by name with parameters

get_tool_schema

Get detailed schema for a specific tool

Result: ~98% context reduction (~1,000 tokens vs ~50,000 tokens)


Quick Start

1. Install dependencies

npm install

2. Add to Claude Desktop

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

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

Add this to the mcpServers object:

{
  "mcpServers": {
    "sor-mcp-server": {
      "command": "node",
      "args": ["/FULL/PATH/TO/mcp-test/src/index.js"]
    }
  }
}

Important: Replace /FULL/PATH/TO/ with the actual absolute path to this repo.

3. Restart Claude Desktop

  • Quit Claude completely (Cmd+Q / Alt+F4)

  • Reopen Claude Desktop

  • You should see the MCP server connected with 3 tools


How It Works

Search Algorithm

  1. Pre-built Index: Each tool has searchable text combining name + description + tags

  2. Keyword Scoring: Query terms are matched against the index

    • +1.0 for partial match

    • +0.5 bonus for exact word boundary match

  3. Schema Filtering: Only schema fields relevant to your query are returned

Example:

Query: "assign ticket user"

Results:
1. ticket_assign (score: 4.5) ← matches all 3 terms
2. ticket_add_watcher (score: 3.0)
3. user_create (score: 1.5)

Schema Filtering

Instead of returning a 60-field ticket schema, it returns only fields matching your query:

Query: "create ticket with priority"

Returns only: id, title, type, status, priority, description
(not: sla, environment, watchers, attachments, etc.)

The 3 Exposed Tools

1. search_tools

Search through 174 backend tools with natural language.

{
  "query": "create user with email",
  "limit": 5,
  "include_schema": true,
  "category": "user",
  "operation": "create"
}

Parameters:

Param

Type

Required

Description

query

string

Yes

Natural language search

limit

number

No

Max results (default: 5)

include_schema

boolean

No

Include filtered schemas (default: true)

category

string

No

Filter by entity type

operation

string

No

Filter by: create, read, update, delete, auth, execute


2. execute_tool

Execute any backend tool by name.

{
  "tool_name": "user_create",
  "params": {
    "email": "john@example.com",
    "first_name": "John",
    "last_name": "Doe"
  }
}

Parameters:

Param

Type

Required

Description

tool_name

string

Yes

Exact tool name

params

object

Yes

Tool parameters


3. get_tool_schema

Get complete or filtered schema for a specific tool.

{
  "tool_name": "ticket_create",
  "query": "priority status"
}

Parameters:

Param

Type

Required

Description

tool_name

string

Yes

Exact tool name

query

string

No

Filter to relevant fields only


Backend Tools (174 total)

CRUD Operations (8 per entity × 18 entities = 144 tools)

Operation

Description

{entity}_create

Create a new record

{entity}_get

Get by ID

{entity}_list

List/search with pagination

{entity}_update

Update a record

{entity}_delete

Delete (soft by default)

{entity}_batch_create

Bulk create

{entity}_batch_update

Bulk update

{entity}_batch_delete

Bulk delete

Entities (18)

Category

Entities

Core

User, Organization, Project

Work

Ticket, Comment, Sprint

Config

Workflow, Webhook, SLA Policy

System

Notification, Audit Log, API Key

Extensions

Integration, Custom Field, Tag

Content

Attachment, Report, Time Entry

Special Tools (30 additional)

Category

Tools

Auth

user_authenticate, user_change_password, user_reset_password, user_enable_2fa, user_invite

Org

organization_add_member, organization_remove_member, organization_list_members

Project

project_add_member, project_remove_member, project_get_metrics

Ticket

ticket_assign, ticket_transition, ticket_add_watcher, ticket_link, ticket_log_time, ticket_get_history

Sprint

sprint_start, sprint_complete, sprint_add_issue, sprint_remove_issue, sprint_get_burndown

Reports

report_run, report_export, audit_log_search, audit_log_export

Webhook

webhook_test, webhook_get_deliveries

Notification

notification_mark_read, notification_get_unread_count


Schema Complexity

Intentionally complex schemas for realistic testing:

Entity

Fields

Nested Objects

User

24+

preferences, metadata, billing_info

Organization

18+

settings, compliance, billing, limits

Ticket

40+

customer, environment, sla, attachments, linked_issues

Workflow

15+

statuses[], transitions[], automations[]


Context Efficiency Comparison

Approach

Est. Tokens

Tools Available

All 174 tools exposed

~50,000+

174

3 meta-tools

~1,000

174 (via search)

Savings

~98%

Same functionality


Testing

Run the server directly

npm start

Test search locally

node -e "
import { allTools, toolIndex, toolCount } from './src/tools.js';
console.log('Total tools:', toolCount);
"

File Structure

mcp-test/
├── src/
│   ├── index.js      # MCP server, exposes 3 tools
│   ├── tools.js      # 174 backend tool definitions
│   └── schemas.js    # Complex entity schemas
├── package.json
└── README.md

License

MIT

Available Tools

3 tools
execute_toolA

Execute a specific tool by name with the provided parameters. Use search_tools first to find the right tool and understand its schema.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsYesParameters to pass to the tool, matching its input schema
tool_nameYesThe exact name of the tool to execute (e.g., "user_create", "ticket_list")

TDQS

A3.7/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 basic behavior (executes a named tool with parameters), but does not disclose that executing arbitrary tools may have side effects, require permissions, or fail. No details are given about error handling, output, or consequential actions, leaving the agent without critical safety context.

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: the first precisely states the tool's function, the second provides essential workflow guidance. Every sentence earns its place, and the core purpose is front-loaded.

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 description covers the essential use case—execute a named tool with params—and mentions the need to discover tools via search_tools. However, it omits guidance on using get_tool_schema to validate parameters, what happens on invalid tool names or schemas, and whether execution results are returned. Given the tool's role as a generic dispatcher, these are meaningful 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 meaningfully. The description adds no extra semantic detail beyond reinforcing that parameters are passed to the named tool. According to the baseline for high schema coverage, a 3 is appropriate because the description does not need to 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 states a specific verb ('execute'), a resource ('a specific tool by name'), and the action taken with params. It clearly distinguishes the tool from siblings by instructing the agent to use search_tools first for discovery, positioning execute_tool as the execution step in the workflow.

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 explicitly directs the agent to use search_tools first, establishing a clear precondition and workflow. It does not explicitly mention get_tool_schema or state when not to use execute_tool, but the 'search first' guidance provides clear context for the intended usage sequence.

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

get_tool_schemaA

Get the complete or filtered schema for a specific tool. Use this when you need detailed schema information for a known tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoOptional query to filter schema fields (returns only relevant fields)
tool_nameYesThe exact name of the tool

TDQS

A3.8/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 behavioral burden. 'Get' implies a read-only operation, and 'complete or filtered' adds some scoping detail. However, it does not explicitly state that the tool does not execute anything, does not require special auth, or describe the return format, leaving some room for ambiguity.

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 only two sentences, front-loaded with the core action first and the usage condition second. There is no fluff or redundant detail, making it easy for an agent to parse quickly.

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 schema-retrieval tool with fully documented parameters, the description is largely sufficient. It does not describe the exact return structure, but the tool's name and purpose make the return type fairly predictable. It also does not mention using search_tools for unknown tools, though the sibling context partially covers this.

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 input schema already documents both tool_name and query. The description adds the 'complete or filtered' concept, which loosely maps to the query parameter, but does not provide new parameter-level meaning beyond what the schema already offers.

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 gets a complete or filtered schema for a specific tool, which is a specific verb plus resource. It does not explicitly name or contrast with siblings like search_tools or execute_tool, though the 'known tool' phrasing hints at differentiation.

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 a clear usage condition: 'Use this when you need detailed schema information for a known tool.' It does not explicitly mention alternatives or exclusions, but the context of a known tool implies this is not for discovery or execution.

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

search_toolsA

Search through 174 available SOR CRUD tools. Returns matching tools with their relevant schema fields based on your query. Use this to discover which tool to use for your task.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return
queryYesNatural language search query (e.g., "create user", "list tickets by status", "update organization billing")
categoryNoFilter by category (user, organization, project, ticket, etc.)
operationNoFilter by operation type
include_schemaNoInclude relevant schema fields in results

TDQS

A4/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 burden of behavioral disclosure. It does state that the tool returns matching tools and relevant schema fields based on the query, which is the core behavior. However, it does not explain relevance ranking, result limits, or behavior when no matches are found—though these are partially inferable from the schema.

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 no filler. The first sentence states scope and return value, and the second provides the intended use case. Every word contributes to the agent's understanding.

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?

The tool is a relatively simple meta-search utility with no output schema, so the description must convey what results look like; it does so by saying it returns matching tools with relevant schema fields. It also communicates the size of the searchable space (174 tools) and the intended workflow. A small gap is that it does not describe the shape of the returned tool objects, but the core invocation context is sufficiently complete.

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 five parameters thoroughly. The description adds only a high-level statement that results are based on the query, which is useful but not necessary. Baseline 3 is appropriate since the schema does the heavy lifting.

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 through') and a specific resource ('174 available SOR CRUD tools'), then states the output: matching tools with relevant schema fields. It clearly distinguishes itself from siblings by positioning itself as the discovery tool, while execute_tool and get_tool_schema serve execution and schema retrieval.

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 explicitly says 'Use this to discover which tool to use for your task,' which gives the agent a clear trigger condition. It does not explicitly name alternatives or say when not to use it, but the discovery framing is sufficient context given the sibling tool names.

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 observedexecute_tool
    • First observedget_tool_schema
    • First observedsearch_tools

TDQS

A4.1/5.0
Disambiguation5/5

Each tool has a clearly distinct role: search_tools is for discovery, get_tool_schema is for inspecting a known tool's schema, and execute_tool is for running the selected tool. The overlap between search_tools returning schema fields and get_tool_schema providing full schema is managed well by the descriptions.

Naming Consistency5/5

All tool names follow a consistent lowercase verb_noun pattern: search_tools, execute_tool, get_tool_schema. This makes the tool set predictable and easy to navigate.

Tool Count5/5

Although only 3 tools are exposed, this is appropriate for a meta-server that dynamically accesses 174 underlying CRUD tools. Each tool earns its place in the discover-schema-execute workflow, so the count is well-scoped rather than thin.

Completeness4/5

The set covers the full meta-workflow: discover tools, inspect schemas, and execute operations. A minor gap is the lack of an explicit list-all-tools operation, though search_tools likely covers discovery if used with a broad query.

Maintenance

ActivityInactive
ResponsivenessNo issues

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

  • A
    license
    Not graded
    quality
    D
    maintenance
    A meta-server that aggregates multiple MCP servers into a single interface, reducing token usage by 98%+ through progressive tool discovery and direct code execution that processes data between tools without consuming context window space.
    16
    10
    Apache 2.0
  • F
    license
    Not graded
    quality
    D
    maintenance
    A context-efficient proxy that replaces individual tool schemas with three meta-tools for semantic search, schema retrieval, and tool routing. It enables agents to manage hundreds of backend tools while maintaining a constant context footprint of approximately 500 tokens.
    1
    -
  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    A drop-in MCP proxy that aggregates multiple backend servers into two meta-tools for efficient tool discovery and execution. It enables AI clients to access hundreds of tools while minimizing context window usage through searchable indexing.
    1
    -

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/shashankcube/sor-mcp-server'

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