sumo-mcp-readonly
Provides read-only tools for querying Sumo Logic logs, including running log searches, finding errors, searching by correlation ID, and managing search job status/cancellation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@sumo-mcp-readonlySearch Sumo Logic for error logs from the last 30 minutes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
sumo-mcp-readonly
A read-only Model Context Protocol (MCP) server for querying Sumo Logic logs. Enables AI-powered coding assistants to search and investigate application logs directly from your editor.
Works with any MCP-compatible client: Kiro, Claude Code, Cursor, VS Code + Copilot, and others.
Why This Project?
As of now July 31, 2026 - Sumo Logic has announced an MCP server as part of their Dojo AI platform (limited beta, focused on security operations), but there is no publicly available, standalone MCP server for general log search. Community options exist but tend to be minimal wrappers around the search API without attention to:
Credential safety — this server redacts access keys from all error output and never logs credentials
Cookie handling — Sumo's Search Job API requires cookies to be maintained per session; most implementations miss this and get intermittent failures
Timestamp format — Sumo rejects ISO-8601 timestamps with milliseconds; this server sends epoch milliseconds correctly
Job isolation — only search jobs created by this process can be queried or cancelled, preventing cross-session leakage
Opinionated tools —
sumo_find_errorsandsumo_search_correlation_idencode common investigation patterns so your AI assistant doesn't need to know Sumo query syntax to be useful
If one of the community servers covers your needs, use it. This one prioritizes correctness and security for production use.
Related MCP server: quickwit-mcp
Quick Start
Prerequisites
Node.js 20 or later
A Sumo Logic account with an Access Key
Install Node.js
macOS (Homebrew):
brew install node@20Or download from https://nodejs.org (LTS version).
Windows:
Option A — Download the installer from https://nodejs.org (LTS version). Run it and accept defaults.
Option B — Using winget:
winget install OpenJS.NodeJS.LTSOption C — Using nvm-windows:
nvm install 20
nvm use 20After installing, open a new terminal and verify:
node --version # Should show v20.x.x or later
npm --version # Should show 10.x or laterLinux (Ubuntu/Debian):
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs1. Create your Sumo Logic Access Key
Log into Sumo Logic
Click your username (bottom-left) and select Personal Access Keys (docs)
Click + Add Access Key
Name it something like "MCP Server"
Access keys can be scoped to limit permissions. When creating the key, select Custom scopes and enable only Log Search — that's the single scope this server needs. No other permissions are required.
The user creating the key must have a role with:
A search filter that allows access to the log data you want to query
The built-in Analyst role works. If you want a minimal custom role, grant View Collectors, set the search filter to allow the source categories you need, and leave everything else unchecked.
Note: The Search Job API requires an Enterprise-tier Sumo Logic account. Free, Professional, and Essentials plans will get a 403 error. (docs)
2. Connect to your MCP client
Add the server to your client's MCP configuration. No install command is needed — your MCP client downloads the package automatically on first use.
Kiro —
.kiro/settings/mcp.jsonClaude Code —
claude_code_config.jsonCursor —
.cursor/mcp.json
{
"mcpServers": {
"sumo-mcp-readonly": {
"command": "npx",
"args": ["-y", "sumo-mcp-readonly"],
"env": {
"SUMO_ACCESS_ID": "your-access-id",
"SUMO_ACCESS_KEY": "your-access-key",
"SUMO_API_BASE_URL": "https://api.sumologic.com/api"
}
}
}
}Security note: If your client supports environment variable references (e.g.,
${SUMO_ACCESS_ID}), prefer those over embedding credentials directly in config files. Set the variables in your shell profile instead.
Tools
Once connected, your MCP client can use these tools:
sumo_search_logs
Run any Sumo Logic query. This is the most flexible tool — anything you can type in the Sumo Logic search bar works here.
{
"query": "_sourceCategory=prod/api status=500 | count by _sourceHost",
"lastMinutes": 30,
"limit": 50
}Supports explicit time ranges too:
{
"query": "error | count by _sourceCategory",
"startTime": "2025-01-15T10:00:00Z",
"endTime": "2025-01-15T11:00:00Z"
}sumo_find_errors
Opinionated error search — looks for ERROR, exception, failure, fatal, and stack traces without needing to write the full query.
{
"sourceCategory": "prod/api",
"service": "user-service",
"lastMinutes": 30,
"text": "NullPointerException"
}sumo_search_correlation_id
Search for a trace ID, request ID, or correlation ID across your logs. The ID is safely escaped as a literal.
{
"correlationId": "550e8400-e29b-41d4-a716-446655440000",
"sourceCategory": "prod/api",
"lastMinutes": 60
}sumo_get_search_status
Check the status of a running search job. Only jobs created in the current session can be queried.
{
"jobId": "IUUQI-DGH5I-TJ045"
}sumo_cancel_search
Cancel a running search job. Only jobs created in the current session can be cancelled.
{
"jobId": "IUUQI-DGH5I-TJ045"
}Configuration Reference
All configuration is via environment variables. Copy .env.example to .env for local development, or pass them via your MCP client's env block.
Variable | Required | Default | Description |
| Yes | — | Sumo Logic Access ID |
| Yes | — | Sumo Logic Access Key |
| Yes | — | Regional API endpoint (see below) |
| No | — | Default |
| No | 1440 | Maximum allowed query time range in minutes |
| No | 1000 | Maximum results returned per query |
| No | 120 | Timeout waiting for search job completion |
| No | info | Log verbosity (debug, info, warn, error) |
Determine Your API Endpoint
Your SUMO_API_BASE_URL must match your Sumo Logic deployment region. Look at the URL in your browser when logged into Sumo Logic:
If your URL contains | Your deployment | API Base URL |
| US1 |
|
| US2 |
|
| EU |
|
| AU |
|
| JP |
|
| CA |
|
| DE |
|
| IN |
|
| FED |
|
Custom/vanity URLs (e.g., yourcompany.sumologic.com) are typically on US1. If you get HTTP 301 errors, you're using the wrong endpoint.
Security Model
This server is deliberately minimal and read-only:
Read-only — only log search operations are supported
No administration — no collector, user, role, token, partition, or source management
No content mutation — no creation, deletion, or modification of Sumo Logic resources
No shell execution — no arbitrary command execution
No persistent storage — query results are not stored to disk
Credentials never logged — access keys are redacted from all log output
Job isolation — only search jobs created by this process can be queried or cancelled
WARNING: Sumo Logic query results may contain PII, secrets, API keys, or other sensitive data depending on what your applications log. Only use this server with MCP clients connected to AI services you trust with your log data.
Troubleshooting
401 Unauthorized — Your Access ID or Key is wrong, revoked, or expired. Double-check both values.
403 Forbidden — The access key's role doesn't have "Run Log Search" capability.
301 Redirect — Wrong regional API endpoint. See the table above. The URL must NOT end with a trailing slash.
Timeout — Increase SUMO_QUERY_TIMEOUT_SECONDS, narrow your time range, or simplify the query. Large searches can take minutes.
400 Bad Request — Query syntax error. Check your Sumo Logic query syntax and field names.
429 Rate Limited — Sumo Logic allows 4 requests/second per user and 200 concurrent jobs per org. Reduce query frequency.
Credential Rotation
Create a new access key in Sumo Logic (Administration > Security > Access Keys)
Update
SUMO_ACCESS_IDandSUMO_ACCESS_KEYin your.envor MCP client configRestart the MCP server (your client will do this automatically on config change)
Verify with a simple query
Revoke the old key in Sumo Logic
Development
npm run dev # Run with tsx (no build step needed)
npm run build # Compile TypeScript
npm test # Run unit tests (68 tests)
npm run test:watch # Watch mode
npm run lint # ESLint
npm run format # Prettier
npm run format:check # Check formatting without writingArchitecture
src/
index.ts — Entry point, config validation, server startup
server.ts — MCP server creation and tool registration
config.ts — Environment variable validation (Zod)
logging.ts — Structured JSON logger (stderr only)
sumo/
client.ts — HTTP client with auth, cookies, error mapping
auth.ts — HTTP Basic authentication header
types.ts — Sumo Logic API type definitions
search-jobs.ts — Search lifecycle orchestration
errors.ts — Typed error hierarchy
tools/
search-logs.ts — sumo_search_logs implementation
find-errors.ts — sumo_find_errors implementation
search-correlation-id.ts — sumo_search_correlation_id implementation
get-search-status.ts — sumo_get_search_status implementation
cancel-search.ts — sumo_cancel_search implementation
query/
escaping.ts — Query literal escaping
builders.ts — Opinionated query construction
security/
redaction.ts — Credential redaction for error output
limits.ts — Time range and result count enforcementLicense
MIT
Available Tools
5 toolssumo_cancel_searchCancel Search JobA
Cancel a running Sumo Logic search job started by this MCP server process.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | The search job ID to cancel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It notes the job must be 'running' and 'started by this MCP server process,' but does not explain behavior for already-completed jobs, failure modes, or the destructive nature (stopping a search). This is a significant gap for a cancel operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that is direct and front-loaded with the key action and scope. It contains no unnecessary words and is easily parsed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple cancel operation, the description covers the essential scope (running jobs, server process), but it does not address edge cases like canceling a non-running job or what the result/response looks like. Since there is no output schema, a bit more detail on post-cancel state or errors would improve completeness, but the tool is inherently simple.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for jobId, and the description adds no additional meaning beyond what the schema states. The description references 'search job' but does not elaborate on jobId formats or provenance beyond the schema's own field description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool cancels a running Sumo Logic search job, specifying both the resource and the action. It also adds scoping with 'started by this MCP server process,' distinguishing it from other search-related tools like sumo_get_search_status or sumo_search_logs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool by referencing 'running' jobs and the process boundary, but it lacks explicit guidance on when not to use it or mention of alternatives. Sibling tools are not referenced, leaving the usage context somewhat implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sumo_find_errorsFind Errors in Sumo LogicA
Search for recent errors using an opinionated query that looks for ERROR, exception, failure, fatal, and stack traces.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Additional text to filter for | |
| limit | No | Maximum number of results | |
| service | No | Service name to filter by | |
| lastMinutes | No | Search the last N minutes (default: 30) | |
| sourceCategory | No | Source category to search (uses default if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description provides the query terms, which is useful. However, it does not mention return format, pagination, rate limits, or other behavioral traits beyond the search itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the purpose and includes specific query terms, with no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with no output schema, the description covers the core behavior and query terms. It is adequate but could mention return results or default behavior more explicitly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are fully documented. The description adds no additional parameter semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for recent errors using an opinionated query with specific error terms (ERROR, exception, failure, fatal, stack traces). This distinguishes it from the general sumo_search_logs sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for finding errors but does not explicitly compare to sibling tools like sumo_search_logs or state when not to use it. The 'opinionated query' hints at specialization but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sumo_get_search_statusGet Search Job StatusA
Get the current status of a Sumo Logic search job started by this MCP server process.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | The search job ID (returned by previous search operations) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only says 'Get the current status' which implies a read-only operation, but it does not mention failure modes, whether it can be called repeatedly, or what happens if the jobId is invalid. This is insufficient transparency for a tool with no structured annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant words. It is front-loaded with the action and resource, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple status-check tool with one parameter and no output schema, the description is fairly complete. It states what the tool does and clarifies the source of the jobId. However, it does not describe possible return statuses or error behavior, which would be helpful given the absence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents jobId with 'The search job ID (returned by previous search operations)' at 100% coverage. The description adds the context 'started by this MCP server process', which reinforces that the job must come from this server, but this is largely already implied by the schema. The description does not add significant new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Get' and clearly identifies the resource as 'current status of a Sumo Logic search job', which distinguishes it from sibling tools like sumo_cancel_search and sumo_search_logs. The phrase 'started by this MCP server process' adds scope and prevents confusion with jobs from other sources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (checking status after starting a search job) but does not explicitly state when to use it versus alternatives. It provides no exclusions or direct references to sibling tools, so the guidance is only implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sumo_search_correlation_idSearch by Correlation IDA
Search for a trace ID, request ID, correlation ID, transaction ID, or similar identifier across logs. The ID is safely escaped as a literal search term.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results | |
| lastMinutes | No | Search the last N minutes (default: 60) | |
| correlationId | Yes | The correlation/trace/request ID to search for | |
| sourceCategory | No | Source category to search (uses default if omitted) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the ID is safely escaped as a literal search term, which is a useful behavioral detail, but it does not mention result format, rate limits, authentication requirements, or page/limit behavior. The description adds some context but remains incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences: the first states the core function, the second notes a safety behavior. Both sentences earn their place, with no fluff or redundancy, and the primary action is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has moderate complexity (4 params, no annotations, no output schema). The description plus schema cover the search purpose and parameter details, but the missing output schema and lack of guidance on comparing with sibling tools leave some contextual gaps. Return value expectations and usage nuance are not fully addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds a few synonyms (transaction ID, etc.) for the correlationId parameter, but this is marginal beyond what the schema already specifies. It does not clarify the meaning of limit, lastMinutes, or sourceCategory beyond their schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches for trace/request/correlation/transaction IDs across logs, which is a specific verb, resource, and scope. It distinguishes itself from sibling tools like sumo_search_logs and sumo_find_errors by focusing on cross-reference identifiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when an identifier is available, but it does not explicitly state when to use this tool over alternatives like sumo_search_logs, nor does it provide exclusions. The context is clear but lacks explicit guidance for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sumo_search_logsSumo Logic Log SearchA
Run a Sumo Logic log query. Provide either startTime+endTime or lastMinutes, but not both. Defaults to the last 15 minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return | |
| query | Yes | Sumo Logic search query | |
| endTime | No | End time in ISO-8601 format (UTC) | |
| startTime | No | Start time in ISO-8601 format (UTC) | |
| lastMinutes | No | Search the last N minutes (alternative to startTime/endTime) | |
| includeRecords | No | Include aggregate records in results | |
| includeMessages | No | Include raw log messages in results |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds value by stating the default time range ('Defaults to the last 15 minutes') and the mutual exclusion of time inputs. However, it does not state that the tool is read-only, what fields the results contain, or any potential side effects. For a search tool, the behavioral disclosure is decent but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core action, and every word contributes. It efficiently communicates the main purpose, key constraints, and a default without extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 7 parameters, no output schema, and no annotations. The description covers only time-related behavior, leaving gaps around expected output format, how the 'query' parameter should be structured, and the effect of flags like includeRecords/includeMessages. While the schema is rich, the lack of output documentation and limited description make the tool moderately, but not fully, contextualized.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already has 100% parameter coverage, so the baseline is 3. The description enhances this by explicitly noting that startTime+endTime and lastMinutes are mutually exclusive ('but not both') and by revealing the default time window. These details go beyond the schema's individual descriptions, clarifying relationship and default behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Run a Sumo Logic log query.' This is a specific verb+resource pair that is distinct from sibling tools like sumo_get_search_status, sumo_cancel_search, or sumo_find_errors. However, it does not explicitly name or contrast these alternatives, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives concrete usage guidance for time parameters: 'Provide either startTime+endTime or lastMinutes, but not both' and the default window. This is useful for avoiding misuse, but it does not say when to choose this tool over siblings (e.g., when a general search is needed vs. an error-focused search). Thus the guidance is mainly about parameter handling, not tool selection.
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.
5 tool updates
v1.0.2- First observed
sumo_cancel_search - First observed
sumo_find_errors - First observed
sumo_get_search_status - First observed
sumo_search_correlation_id - First observed
sumo_search_logs
TDQS
Scored across 5 tools
The tools have mostly distinct purposes: general search, specialized error search, correlation ID search, status check, and cancel. The two specialized searches could be seen as overlapping with the general search, but their specific intents and query behavior are clearly described.
All tools share the 'sumo_' prefix and follow a verb_noun pattern. However, 'sumo_find_errors' uses 'find' instead of 'search', which is a minor deviation from the otherwise consistent use of 'search', 'get', and 'cancel'.
Five tools is well-scoped for a read-only Sumo Logic MCP server. Each tool addresses a distinct need: running searches, managing search jobs, and specialized search shortcuts, without unnecessary bloat.
The presence of search, status, and cancel suggests an asynchronous search job lifecycle, but there is no explicit tool to retrieve the actual results of a completed search. This is a notable gap that agents will need to work around, possibly expecting search_logs to return results synchronously, but this is not clearly indicated.
Maintenance
Related MCP Connectors
Query application logs, traces, and metrics from your AI coding assistant via Foam's MCP server.
A paid remote MCP for AI SDK data query MCP, built to return verdicts, receipts, usage logs, and aud
Read-only MCP server for AIStatusDashboard status, incidents, metrics, and fallback recommendations.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Related MCP Servers
- FlicenseBqualityBmaintenanceMCP server that integrates with Sumo Logic's API to perform log searches, data discovery, metrics queries, and monitoring.156-
- AlicenseNot gradedqualityFmaintenanceA read-only MCP server that exposes Quickwit log search and aggregations to LLM clients, enabling natural language log investigation.Apache 2.0
- AlicenseAqualityDmaintenanceA read-only MCP server that gives AI assistants natural language access to Elasticsearch/Kibana logs for querying and analysis.7MIT
- AlicenseAqualityAmaintenanceA read-only MCP server that enables AI assistants to search, aggregate, and explore OpenSearch log data through 12 tools for connectivity, index discovery, search, and aggregations.17MIT