successfactors-mcp
This server is an MCP toolkit for querying, inspecting, and exporting SAP SuccessFactors data through OData and EC Compound Employee APIs.
List configured SuccessFactors tenants and see plugin/load status.
Fetch OData metadata as compact field maps for a whole service or a single entity, including navigation properties.
Compare OData metadata between two tenants to detect configuration drift, such as missing fields or changed attributes.
Run OData v2 queries with filters, $select, paging, optional inline previews, and save full results to JSON files.
Query the EC Compound Employee SOAP API by external person ID, user ID, last-modified date, or as a full extract, saving XML payloads to disk.
Support per-request tenant selection via company_id, with safeguards against querying misconfigured tenants.
Provides integration with SAP SuccessFactors, enabling API troubleshooting, payload extraction, and integration development through Employee Central SFAPI (Compound Employee SOAP) and OData v2 endpoints, including employee lookups, delta extracts, pagination, and tenant key management.
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., "@successfactors-mcpPull a delta extract of employees since April 1st"
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.
SuccessFactors Toolkit
A self-hosted toolkit for SAP SuccessFactors API troubleshooting, payload extraction, and integration development, exposed as a REST API and as an MCP (Model Context Protocol) server.
API | Protocol | Endpoint prefix |
EC SFAPI — Compound Employee | SOAP 1.1 |
|
OData | REST (v2) |
|
This is an independent project, not affiliated with or endorsed by SAP SE. SAP and SuccessFactors are trademarks of SAP SE.
Start here: Docker MCP → credentials → ask → export
Data security: prefer local deployment. For sensitive SuccessFactors employee data and credentials, we recommend running the MCP server in local Docker and using a local AI agent, rather than an online AI platform or a third-party hosted MCP service. Keep credentials and exports on your machine; do not upload private keys or employee payloads to online platforms.
A local AI agent is not necessarily a local model. If it calls a cloud model, prompts, tool responses, previews, and file contents supplied to that model may leave your machine. If HR data must stay within your controlled environment, use a locally hosted model and local file-processing tools, and check the agent's outbound data handling. Local Docker alone does not guarantee this. The toolkit still connects to your configured SuccessFactors tenant to query data.
For functional consultants and business key users, start with the business user guide or its English/Chinese HTML edition. Ask IT to complete the one-time Docker Compose setup and provide approved connection files. Then:
Check Docker Desktop or your IT-managed Docker service is running, then open your local AI application.
Confirm with IT that the connection files are in
sf-toolkit/credentials.Confirm the SuccessFactors environment and ask for the employee, date, and information you need.
Find results under
sf-toolkit/data/mcp. Ask a file-capable AI application for CSV or another supported format, or a copy in an authorized folder.
The guide includes example business questions, completion checks, troubleshooting, and expandable one-time settings for your administrator. Original OData results are JSON; Compound Employee results are XML. CSV conversion requires local file tools in the AI application.
Related MCP server: @belal-elsabbagh-apex/copilot-mcp
Documentation
Page | Covers |
Fail-closed setup, install and run, cheat sheet, response format | |
Key pair generation, environment variables, private key resolution order, tenant management | |
Compound Employee single lookup, structured filter query, pagination, known footguns | |
| |
Tools for AI agents, payload handling, export formats, PII tokenization, plugins | |
Local dev setup, linting, tests, release process |
Data handling
Use synthetic examples and test fixtures. Credentials, certificates, tenant
exports, employee payloads, and generated results do not belong in Git —
.gitignore and scripts/check_repository.py are a basic guardrail, not a
complete secret or personal-data scanner. See SECURITY.md for
deployment guidance and how to report a vulnerability.
License
Apache License 2.0. Copyright 2026 Justin Gong. See NOTICE for third-party and migrated-code attribution.
Available Tools
5 toolsce_queryA
Query the EC Compound Employee (SOAP) API and save the payload to disk.
person_id_external / user_id are comma-separated and take precedence over every other filter when set. last_modified_on is an ISO datetime for a delta pull (SAP allows at most 3 months of look-back). With no filter at all this is a full extract, capped by max_pages.
CompoundEmployee SFQL allows only ONE condition on last_modified_on in the WHERE clause — a query with both a lower and an upper bound (last_modified_on>X and last_modified_on<=Y) fails with INVALID_SFQL: Only one condition is allowed. This tool only ever emits the lower bound; apply any upper bound to the returned rows client-side, not by adding a second last_modified_on condition.
last_modified_on's filtering also depends on an SFQL parameter, isNotFirstQuery, that this tool does not currently set: per tenant testing, a query without isNotFirstQuery ignores last_modified_on entirely and returns a full snapshot of the matching window, while isNotFirstQuery=true makes last_modified_on act as a real delta filter. Until this tool exposes that parameter, treat last_modified_on here as a full-window snapshot, not a guaranteed delta — don't rely on it alone to mean "only changed rows".
select_segments defaults to the widely supported COMMON_SEGMENTS. If SF answers INVALID_SFQL naming a segment, that module is not enabled on the tenant — pass a narrower list.
Each queryMore page is written as its own XML file. The tool returns counts and paths only: one employee's payload is ~80 KB of HR data.
| Name | Required | Description | Default |
|---|---|---|---|
| user_id | No | ||
| max_rows | No | ||
| max_pages | No | ||
| company_id | No | ||
| select_segments | No | ||
| last_modified_on | No | ||
| person_id_external | No | ||
| include_contingent_workers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses many non-obvious behaviors: precedence rules, the single-condition SFQL restriction, the isNotFirstQuery dependency that makes last_modified_on act as a snapshot rather than a true delta, segment fallback, per-page file writing, and that only counts/paths are returned. This is exceptionally transparent.
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?
Though long, every sentence adds critical value. The structure front-loads purpose, then systematically covers filter precedence, datetime constraints, segment handling, and output behavior. No filler; it is dense but well-organized for a complex API.
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 complex tool with 8 parameters, no annotations, and an output schema, the description covers the key behaviors, failure modes, and return format. It even notes payload size (~80 KB) and page output. An agent has enough to call it correctly and avoid common pitfalls.
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 0%, so the description must compensate. It explains person_id_external/user_id precedence, last_modified_on ISO format and limitations, select_segments default and fallback, and max_pages via 'capped by max_pages'. However, it leaves max_rows, company_id, and include_contingent_workers undefined. Partial but not complete compensation for the coverage gap.
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?
Description states a specific verb ('Query') and resource ('EC Compound Employee (SOAP) API') and adds the side effect of saving payload to disk. It clearly distinguishes from siblings like odata_query by naming the SOAP API, so an agent knows what this tool targets.
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?
Provides explicit guidance on when filters take precedence (person_id_external/user_id), the 3-month look-back constraint for last_modified_on, and warns about the isNotFirstQuery limitation. It does not explicitly name alternatives like odata_query for different APIs, but gives clear usage context for its own parameters and edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_metadataA
Compare the OData configuration of two instances and return the drift.
entity="EmpJob" compares one entity set; entity="" compares the whole service. The comparison runs here, not in the conversation: one instance's EmpJob metadata alone is ~40 KB, so diffing two of them in context is both expensive and easy to get wrong.
Returns in_sync plus, per entity, the fields missing on either side and the
fields whose attributes differ, each as [value_in_a, value_in_b]. The sap:
attributes are the configuration itself — required, visible, upsertable,
picklist, MaxLength — so a changed picklist or a field that never left the
dev instance shows up here.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | No | ||
| company_a | Yes | ||
| company_b | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so well. It states that the comparison runs remotely, not in the conversation, and details the return shape: in_sync, per-entity missing fields, and differing attributes as [value_in_a, value_in_b]. It even explains which attributes matter and why, giving the agent real operational insight.
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 front-loaded with the core purpose, then adds parameter behavior, then returns and edge-case meaning. Every sentence earns its place, including the size rationale and the sap: attribute explanation, without becoming bloated.
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 comparison tool of this complexity, the description covers what the tool does, how it behaves, what its main parameter controls, and what the output means. An output schema exists to supply formal return-field definitions, so nothing critical is missing for an agent to select and invoke the tool correctly.
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 0%, so the description must clarify the parameters. It fully documents the non-obvious entity parameter with an explicit example and the empty-string whole-service case, and it maps company_a and company_b to the two instances being compared. For three simple parameters, this is sufficient.
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 opening line states a precise operation—compare the OData configuration of two instances—and names the result: drift. It is clearly distinct from siblings like odata_query and odata_metadata, which are single-instance read/query tools.
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 clear guidance on entity scope: comparing one entity set versus the whole service. It also explains why the tool should run the comparison instead of doing it in-conversation, using a concrete size rationale. It does not explicitly name sibling alternatives or when-not-to-use cases, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tenantsA
List the SuccessFactors instances this server can reach.
Call this first: the company_id values it returns are what the other tools
take as their company_id argument. An empty company_id always means the
instance configured in the server's own .env, reported here as "default".
"plugins" reports each installed plugin and whether it loaded.
"production" is the tenant's declared environment; odata_query and
ce_query refuse a tenant where it is null or "config_error" is set.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well by explaining the default-instance convention, the meaning of the 'plugins' and 'production' fields, and downstream refusal behavior. It could mention failure/authentication behavior, but for a zero-parameter listing tool the disclosed behavior is substantially transparent.
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 compact, front-loaded with the core purpose, and every sentence adds meaningful guidance. It avoids restating the tool name or schema and uses short paragraphs to separate purpose, usage, and field semantics.
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?
Given zero parameters, an existing output schema, and sibling tools that depend on this tool's return value, the description fully covers what an agent needs: why to call it first, how company_id maps to other tools, and the meaning of returned fields that affect downstream behavior.
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 tool has no parameters and schema coverage is 100%, so parameter semantics are essentially moot. The description adds useful semantic context for the returned company_id field, especially the empty-company_id-means-default convention, which goes beyond the empty 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 opens with a specific verb and resource: 'List the SuccessFactors instances this server can reach.' This clearly distinguishes list_tenants from the sibling query/metadata tools, since its purpose is to enumerate reachable tenants rather than run queries against them.
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?
It explicitly says 'Call this first' and explains why: the returned company_id values are required by the other tools. It also names odata_query and ce_query and states that they refuse tenants with null production or config_error, giving concrete when-to-use and prerequisite context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odata_metadataA
Fetch OData $metadata (EDMX) and reduce it to a compact field map.
entity="" pulls the whole service metadata (large — hundreds of entity types); entity="EmpJob" pulls just that entity set. The full {entity: {field: attributes}} map is written to a JSON file, and a small map is returned inline as well, so two instances can be compared without ever loading raw EDMX into the conversation. When entity is given, its navigation properties (name, target entity type, filterable) are listed too — entity-scoped $metadata doesn't carry them, so this resolves them from the full service $metadata instead (fetched once per company_id per process, then cached); a lookup failure is reported as a warning and never blocks the field output above. Use the navigation names to scope filters into other entities via $filter (see the server's "Scope with EmpJob first" guidance and odata_query's docstring) instead of pulling whole entity sets and joining locally.
| Name | Required | Description | Default |
|---|---|---|---|
| entity | No | ||
| company_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden and does so comprehensively. It discloses that entity='' fetches the entire large metadata, that the full map is written to a JSON file while a small map is returned inline, that navigation properties are resolved from the full service metadata when entity is given, that caching is per company_id per process, and that lookup failures are reported as warnings without blocking output. It also states it never loads raw EDMX into the conversation, which is valuable context.
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 somewhat long but well-structured: it starts with the core purpose, then explains entity behavior, output, navigation resolution, and finally usage guidance. Each sentence adds necessary information; there is no redundancy. While it could be tightened slightly, the length is justified given the tool's complexity and the lack of schema descriptions.
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 tool with two parameters, no annotations, and an output schema (likely containing return details), the description covers all necessary aspects: when to use it, parameter semantics, behavioral nuances (file writing, inline return, caching, error handling), and cross-references to sibling tools. It also explains why navigation properties are resolved from full metadata, making the tool self-contained for an agent.
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 0%, so the description must explain parameters. It thoroughly explains entity: '' means whole service, 'EmpJob' means a specific entity set. It mentions company_id in the context of caching per company_id per process, implying it identifies the OData service endpoint, though it does not explicitly state its role as a service identifier. This is sufficient for an agent to infer usage, but a direct statement would make it fully clear.
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 fetches OData $metadata (EDMX) and reduces it to a compact field map, with a specific verb and resource. It distinguishes itself from siblings like odata_query (querying data), compare_metadata (comparing), and list_tenants (tenants) by focusing on metadata retrieval and transformation. The entity parameter behavior is explicitly explained, leaving no ambiguity about purpose.
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 provides explicit guidance on when to use this tool: it advises using navigation names from this tool to scope filters in odata_query instead of pulling whole entity sets locally. It also contrasts entity='' vs entity='EmpJob' usage, giving clear context for parameter choice. No explicit exclusions are needed since it directly references the alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
odata_queryA
Run an OData v2 query, following __next until exhausted or max_pages.
path is the entity set and may carry query options, e.g. "FOCompany" or
"EmpJob?$select=userId,jobCode" — those are parsed out of path and merged
into the request; pass options either way, but prefer params (params win
on conflicts). Always $select only the fields you need. Effective-dated
entities (EmpJob, Position, FO*, MDF) return ONLY today's time slice unless
you pass fromDate=1900-01-01 and toDate=9999-12-31 (or asOfDate) in params.
Scope with a population filter pushed through navigation in $filter
(e.g. personNav/employmentNav/jobInfoNav/company in (...)) rather than
pulling whole entity sets — see the server instructions.
When max_pages > 1 and no $orderby is given, one is added from the
entity's key properties (reported as orderby_added) so $skip paging
can't duplicate or skip rows; if keys are unknown or unsortable, or SF
rejects it, the query runs without and a warning says so — then pass
$orderby yourself. Same condition, without $top/$skip, also adds
paging=snapshot (reported as paging_added); if SF rejects it for
that entity, the retry drops it and warns. Rows are checked for
duplicate keys when every key field is in the records (duplicate_records
warning if found). A final page exactly $top-sized with no __next gets a truncation warning (some MDF entities stop early); resume with $skip and an explicit $orderby.
Records are written to a JSON file; the tool returns counts, the field names of the first record, and the path. preview accepts 0-20; values above zero return that many records inline only when their serialized UTF-8 size is at most 16 KiB. Otherwise, inspect the saved file locally.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| params | No | ||
| preview | No | Inline records; maximum 20. | |
| max_pages | No | ||
| company_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does so thoroughly: it discloses __next pagination, orderby_added/paging_added, duplicate-key checks, truncation warnings, effective-dated slices, file writing, and preview size limits. This is far beyond a minimal mutation notice and gives the agent accurate expectations.
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 long but dense; the core operation is front-loaded and each paragraph addresses a distinct concern (paging, filtering, effective dates, warnings, file output). It could be tightened with headers, but it contains no filler or repetition.
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 complex tool with pagination, warning conditions, output files, and no annotations, the description covers nearly all invocation and side-effect details. The main gap is the undocumented `company_id` parameter and reliance on external server instructions for filter navigation.
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 only 20%, and the description compensates for most parameters: it explains `path` as an entity set carrying query options, `params` merge precedence and date controls, `max_pages` orderby/paging behavior, and `preview` inline-size constraints. `company_id` is never explained, so parameter documentation is not complete.
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 opening sentence names a specific verb and resource: 'Run an OData v2 query...' and the second paragraph defines `path` as the entity set, so the tool's function is clear. It does not explicitly contrast itself with sibling tools like `ce_query` or `odata_metadata`, leaving some differentiation to the agent.
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 clear operational context: when to use max_pages, how to pass filters, how to select fields, and effective-date handling with fromDate/toDate. It does not name sibling tools or state when not to use this tool, so it falls short of explicit alternative routing.
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.
1 tool update
v0.1.2- Changed
odata_query3 fields changed- added
Input schema / properties / preview / descriptionAdded value: +"Inline records; maximum 20." - added
Input schema / properties / preview / maximumAdded value: +20 - added
Input schema / properties / preview / minimumAdded value: +0
5 tool updates
v0.1.0- First observed
ce_query - First observed
compare_metadata - First observed
list_tenants - First observed
odata_metadata - First observed
odata_query
TDQS
Scored across 5 tools
The five tools are mostly distinct: list_tenants is a discovery/preflight tool, odata_query and ce_query are two different query APIs (OData vs SOAP CompoundEmployee), and compare_metadata/odata_metadata are metadata inspection tools. There is some overlap between compare_metadata and odata_metadata since both deal with metadata, but their purposes differ (drift comparison vs. field map extraction).
Tool names follow a consistent verb_noun pattern: list_tenants, odata_query, ce_query, compare_metadata, odata_metadata. The two query tools use a slightly different style (odata_query vs ce_query) but both are query operations; compare_metadata and odata_metadata are also consistent. Minor inconsistency: ce_query is an acronym-based name while odata_query is spelled out, but the pattern is otherwise predictable.
Five tools is a reasonable, focused set for a SuccessFactors MCP server covering tenant discovery, two query paths, and metadata comparison. It is slightly on the smaller side but each tool has a clear role and the count is appropriate for the domain.
The server covers read/query operations and metadata comparison well, but lacks write operations (create/update/delete) and there is no tool for retrieving a single record by ID or for handling other SuccessFactors APIs (e.g., OData v4, REST APIs). The query tools are powerful but the surface is read-focused, which may be intentional but leaves gaps for agents needing to modify data.
Maintenance
Related MCP Connectors
Query SEC EDGAR filings, XBRL financials, and company data through MCP. STDIO & Streamable HTTP.
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
Search NPPES providers and resolve NUCC specialty codes via MCP over STDIO or Streamable HTTP.
Remote MCP for 1,500+ APIs. Vault-managed credentials; OAuth or API key. Search, load, and execute.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables querying SAP SuccessFactors OData API metadata and managing Role-Based Permission (RBP) configurations. It provides tools for retrieving entity metadata, listing permission roles, and inspecting user-specific access rights through MCP-compatible clients.2912MIT
- FlicenseNot gradedqualityAmaintenanceEnables EHR Copilot operations such as order cloning, queue building, and execution trace analysis over stdio.-
- FlicenseAqualityCmaintenanceRead-only MCP server for searching migrated Papertrail logs via SolarWinds Observability API. Provides tools to list environments and perform bearer-authenticated log queries through stdio.221 npm-
- FlicenseNot gradedqualityCmaintenanceEnables querying enterprise records and retention policies from any MCP client over stdio, with read-only tools for searching records, fetching retention verdicts, identifying archival candidates, summarizing departments, forecasting retentions, and viewing audit history.-