Skip to main content
Glama
Siemssen-Consulting-GmbH

mcp-easycompliance

Official

mcp-easycompliance

An MCP (Model Context Protocol) server for easycompliance – the German SaaS platform for automated sanctions list and PEP screening.

It lets AI agents (Claude Desktop, Claude Code, Cursor, agent frameworks and other MCP clients) screen business partners against EU/US/HADDEX sanctions lists and PEP lists, and maintain the daily monitoring list of an easycompliance account. The server is a pure consumer of the easycompliance REST API – executed tool calls (screenings, status/hit queries and executed monitoring changes) count towards the account's regular API quota and appear in the account's API log. Rejected requests (e.g. an invalid key) and deletion attempts without a matching entry are not logged.

Tools

Tool

Kind

Description

check_sanctions_list(name, accuracy?)

read-only

One-time screening of a name against the EU/US/HADDEX sanctions lists

check_pep_list(name, accuracy?)

read-only

One-time screening of a name against the PEP list (politically exposed persons)

get_hits_last_24h(list)

read-only

Hits produced by the daily monitoring within the last 24 hours

get_list_status(list)

read-only

Date (dd.mm.yyyy) of the last update of the selected list

check_and_add_to_monitoring(list, name, ref?, duplicate_by?, accuracy?)

write

Screens the name and adds it to the account's daily monitoring list

remove_from_monitoring(list, by, value)

write

Removes one matching entry from the daily monitoring list (by name or by reference)

list is "sanctions" or "pep". Screening results are always structured: hit (boolean), hitCount and hits[] with a percent match score – an empty result (HTTP 204 of the API) is returned as hit: false, never as an error.

Compliance notes

  • The tool results are the authoritative source. The tool descriptions instruct the calling model to never soften, filter or omit hits.

  • If hit is true, the professional assessment of the match belongs in the easycompliance customer portal (https://kunde.easycompliance.de, Monitoring → Hits) – not in the AI conversation.

  • check_and_add_to_monitoring has a persistent side effect (the name is re-screened daily and counts towards the account's monitoring quota); remove_from_monitoring removes monitoring entries. Both are clearly marked as write tools (no readOnlyHint), so MCP clients can require confirmation.

  • remove_from_monitoring removes exactly one matching entry per call and is deliberately not marked idempotent: if several monitoring entries share the same name, a retried call removes another one of them. Use by="ref" with unique references to address a specific entry.

Related MCP server: @deepidv/mcp-server

Requirements

You need an easycompliance account with API access. Customer service (https://www.easycompliance.de/) provides:

  • your API key,

  • the sanctions list API URL and the PEP API URL (only needed if your account uses customer-specific URLs – the public defaults are built in).

Configuration

All configuration is via environment variables. The MCP server itself never writes the key to a file and never logs it. Note that your MCP client stores the values you configure (including EC_API_KEY, as in the examples below) in its own configuration file, e.g. claude_desktop_config.json – protect that file like a password, and prefer your client's environment-variable or secret-management support where available.

Variable

Required

Default

Description

EC_API_KEY

yes (stdio)

API key provided by easycompliance customer service

EC_SANCTIONS_URL

no

https://www.easycompliance.de/easy.api

Sanctions list API endpoint

EC_PEP_URL

no

https://www.easycompliance.de/pep.api

PEP API endpoint

Installation

The package runs with Node.js >= 20 and is started via npx mcp-easycompliance (stdio transport).

Claude Desktop

Add the server to claude_desktop_config.json (Settings → Developer → Edit Config):

{
  "mcpServers": {
    "easycompliance": {
      "command": "npx",
      "args": ["-y", "mcp-easycompliance"],
      "env": {
        "EC_API_KEY": "your-api-key"
      }
    }
  }
}

Claude Code

claude mcp add easycompliance --env EC_API_KEY=your-api-key -- npx -y mcp-easycompliance

Cursor

Add to ~/.cursor/mcp.json (or the project's .cursor/mcp.json):

{
  "mcpServers": {
    "easycompliance": {
      "command": "npx",
      "args": ["-y", "mcp-easycompliance"],
      "env": {
        "EC_API_KEY": "your-api-key"
      }
    }
  }
}

Other MCP clients

Any MCP client that supports the stdio transport can run npx -y mcp-easycompliance with the EC_API_KEY environment variable set.

Remote endpoint (streamable HTTP)

easycompliance hosts a remote endpoint with the identical tool set at https://www.easycompliance.de/mcp.api (streamable HTTP; implemented in PHP inside the easycompliance stack, verified against the same MCP SDK client test harness as this package). It works with remote clients that can send custom request headers, such as the OpenAI Responses API or MCP SDK clients; ChatGPT custom connectors depend on compatible authentication (OAuth is a planned extension, see below), so ChatGPT app support is in preparation.

The package also contains a second entry point, mcp-easycompliance-http, which serves the same tool set over streamable HTTP for self-hosting (e.g. enterprise deployments in your own infrastructure – see deploy/):

  • Authentication: the client sends its easycompliance API key in the X-API-Key request header; the server passes it through 1:1 to the REST API on every call. There is no key store, no session state and no persistence in the MCP layer.

  • OAuth is currently out of scope (planned as a future extension for connector directories that require it).

Example (Claude Code):

claude mcp add --transport http easycompliance https://www.easycompliance.de/mcp.api --header "X-API-Key: your-api-key"

Operations & security (self-hosting the HTTP endpoint)

Deployment templates (nginx reverse proxy, systemd unit, Dockerfile + step-by-step guide) are in deploy/:

  • The Node process binds to 127.0.0.1 only; TLS and the public hostname are provided by the nginx reverse proxy.

  • The server is stateless: each request creates a fresh server instance with the key from the request header; nothing outlives the request.

  • The MCP layer logs no names, no screening data and no keys – the API's own log (apilog) is the audit trail for executed calls, which also count towards the account's API quota there.

  • GET /healthz returns 200 ok for uptime checks.

Environment variables of the HTTP entry point: MCP_HTTP_HOST (default 127.0.0.1), MCP_HTTP_PORT (default 8765), MCP_HTTP_PATH (default /mcp), plus EC_SANCTIONS_URL/EC_PEP_URL as above. EC_API_KEY is not used in HTTP mode – keys always come from the client request.

API behaviour

The underlying REST API responds with HTTP 200 (JSON result array), 204 (no hit / no entry), 400 (invalid request body), 401 (invalid API key or suspended account), 403 (operation not included in the API plan) or 405 (non-POST). The server normalizes these into structured tool results and clear tool errors; an HTTP 200 without a result array is reported as a transport error and never as a clean "no hit". For get_list_status, an HTTP 204 (no completed list update verifiable yet) and a malformed date are reported as tool errors rather than as an empty status.

Known limitation of the API contract (shared with all API clients, including the n8n community node): for check_and_add_to_monitoring the API reports the screening result without a separate confirmation of the monitoring insertion – a server-side insert failure is logged on the server but not signalled in the HTTP response. Extending the API contract is outside the scope of this consumer package.

Development

npm ci
npm run lint
npm run build
EC_API_KEY=<test-key> npm run livetest        # live harness (stdio logic) against the production API
EC_API_KEY=<test-key> npm run livetest:http   # live harness for the streamable HTTP transport

Resources

License

MIT

Available Tools

6 tools
check_and_add_to_monitoringCheck name and add to daily monitoringA

Screens the name like check_sanctions_list/check_pep_list AND adds it to easycompliance's DAILY monitoring list: from then on the name is re-screened every day and new hits are reported to the account (persistent side effect; each monitored name counts towards the account's monitoring quota). Use duplicate_by="ref" with a non-empty ref to distinguish different partners that share the same name. Each call – including retries – is a separate billable API request that counts towards the account's API quota, even when duplicate detection prevents a second monitoring entry. COMPLIANCE: The tool result is the authoritative source. Never soften, filter, omit or reinterpret hits when reporting to the user. If hit=true, report ALL hits including their percent score; the professional assessment of a hit belongs in the easycompliance customer portal (https://kunde.easycompliance.de, Monitoring → Hits), not in this conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
refNoYour own reference, e.g. a customer, supplier or employee number
listYesWhich easycompliance list to use: "sanctions" (EU/US/HADDEX sanctions lists) or "pep" (politically exposed persons)
nameYesName of the person or organization to screen and monitor (UTF-8)
accuracyNoSearch accuracy between 50 and 100 (percent). If not set, the search pattern configured for the easycompliance account is used.
duplicate_byNoWhether an entry is considered a duplicate by its name (default) or by its reference. "ref" requires a non-empty ref.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hitYestrue if the screening produced at least one potential match
refYesThe reference that was sent along, empty if none
hitsYesFull match records from the API, each including a "percent" match score
nameYesThe screened name (as sent to the API)
hitCountYesNumber of potential matches

TDQS

A4.6/5.0
Behavior5/5

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

The description thoroughly discloses side effects: persistent monitoring, daily re-screening, quota impact, billable API requests even on duplicates, and compliance reporting obligations. This goes far beyond annotations (readOnlyHint=false, destructiveHint=false) by adding operational and financial context.

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 long but every sentence carries critical information: purpose, side effect, quota, billing, and compliance. It is front-loaded with the main action and structured logically, though it could be tightened without losing essential details.

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

Completeness5/5

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

With an output schema present, the description need not explain return values. It covers all necessary operational aspects: what the tool does, persistent effects, cost implications, duplicate handling, and compliance requirements. The description fully prepares an agent to invoke the tool safely and appropriately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds valuable semantics beyond schema by explaining how duplicate_by interacts with the 'ref' parameter ('Use duplicate_by="ref" with a non-empty ref to distinguish different partners that share the same name') and clarifies that accuracy defaults to the account configuration. This elevates the parameter understanding.

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 dual function: 'Screens the name like check_sanctions_list/check_pep_list AND adds it to easycompliance's DAILY monitoring list.' This distinguishes it from the sibling check tools and remove_from_monitoring, with a specific verb+resource+effect.

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 implies when to use this tool (ongoing monitoring) versus one-off checks via check_sanctions_list/check_pep_list, and gives explicit guidance for duplicate_by='ref' to distinguish same-name partners. However, it does not explicitly state 'use this tool when you need ongoing monitoring' or list exclusions, leaving some inference to the agent.

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

check_pep_listCheck name against PEP listA
Read-only

One-time screening of a single person name against the PEP list (politically exposed persons) via the easycompliance API. No monitoring entry is created; like every executed API call, the screened name and result are recorded in the account's API log. Returns hit (boolean), hitCount and hits[] with a percent match score. COMPLIANCE: The tool result is the authoritative source. Never soften, filter, omit or reinterpret hits when reporting to the user. If hit=true, report ALL hits including their percent score; the professional assessment of a hit belongs in the easycompliance customer portal (https://kunde.easycompliance.de, Monitoring → Hits), not in this conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the person or organization to screen (UTF-8)
accuracyNoSearch accuracy between 50 and 100 (percent). If not set, the search pattern configured for the easycompliance account is used.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hitYestrue if the screening produced at least one potential match
refYesThe reference that was sent along, empty if none
hitsYesFull match records from the API, each including a "percent" match score
nameYesThe screened name (as sent to the API)
hitCountYesNumber of potential matches

TDQS

A4.5/5.0
Behavior5/5

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

The annotations already declare readOnlyHint and openWorldHint, but the description adds significant behavior: it records the screened name and result in the API log, returns specific fields (hit, hitCount, hits[] with percent score), and includes a compliance directive about reporting all hits without softening. This goes well beyond what annotations convey.

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?

Every sentence delivers value: it states the core function, the side effect of logging, the return structure, and critical compliance rules. The compliance section is essential for correct use and is written without fluff. Well-structured and appropriately sized.

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

Completeness5/5

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

For a compliance-sensitive tool, the description covers all necessary aspects: what it does, side effects, return data, and reporting requirements. It even provides a link for professional assessments. The output schema is present, but the description also explains the key fields, making it self-sufficient for 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?

The input schema covers both parameters (name and accuracy) with complete descriptions, so the baseline is 3. The description does not add extra parameter semantics, but the schema already provides sufficient meaning, so no deduction is needed.

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

Purpose5/5

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

The description clearly states the tool performs 'One-time screening of a single person name against the PEP list', with a specific verb and resource. It also distinguishes itself from the sibling tool check_and_add_to_monitoring by emphasizing that no monitoring entry is created.

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: it is for one-time screening and explicitly notes that no monitoring entry is created, which signals when to use it versus monitoring tools. However, it does not explicitly name alternative tools or provide explicit when-not-to-use guidance, so it falls just short of a 5.

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

check_sanctions_listCheck name against sanctions listsA
Read-only

One-time screening of a single person or organization name against the EU/US/HADDEX sanctions lists via the easycompliance API. No monitoring entry is created; like every executed API call, the screened name and result are recorded in the account's API log. Returns hit (boolean), hitCount and hits[] with a percent match score. COMPLIANCE: The tool result is the authoritative source. Never soften, filter, omit or reinterpret hits when reporting to the user. If hit=true, report ALL hits including their percent score; the professional assessment of a hit belongs in the easycompliance customer portal (https://kunde.easycompliance.de, Monitoring → Hits), not in this conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the person or organization to screen (UTF-8)
accuracyNoSearch accuracy between 50 and 100 (percent). If not set, the search pattern configured for the easycompliance account is used.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hitYestrue if the screening produced at least one potential match
refYesThe reference that was sent along, empty if none
hitsYesFull match records from the API, each including a "percent" match score
nameYesThe screened name (as sent to the API)
hitCountYesNumber of potential matches

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnlyHint and openWorldHint annotations, the description discloses important behavioral specifics: results are logged in the account's API log, the tool returns hit/hitCount/hits[] with percent scores, and it mandates that the tool result is authoritative and must never be softened or filtered. This adds substantial behavioral context without contradicting the annotations.

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 front-loaded with the core purpose and then adds necessary operational and compliance details. The compliance paragraph is somewhat lengthy, but it contains essential directives for a sanctions-screening tool and is not redundant with the schema or annotations. Overall, every section contributes value.

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

Completeness5/5

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

Given the output schema exists, the description still supplies the return field names (hit, hitCount, hits[]) and explains the recording side effect in the API log. It covers the tool's purpose, limitations, compliance obligations, and expected output, making it complete for an agent to select and invoke correctly.

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 both parameters clearly documented (name, accuracy with range and default behavior). The description adds little beyond the schema, only reinforcing that the name is a single person or organization, which is already in the schema. Baseline 3 is appropriate because the schema carries the parameter documentation burden.

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 ('check') and a precise resource ('single person or organization name against the EU/US/HADDEX sanctions lists via the easycompliance API'). It also distinguishes itself from siblings by explicitly stating this is one-time screening and that no monitoring entry is created, which separates it from check_and_add_to_monitoring and check_pep_list.

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

Usage Guidelines4/5

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

The description clearly states when to use this tool: 'One-time screening of a single person or organization name' and explains a key exclusion: 'No monitoring entry is created.' It does not explicitly name alternative tools for ongoing monitoring, but the context of sibling tools and the 'one-time' scope provide clear usage boundaries.

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

get_hits_last_24hGet monitoring hits of the last 24 hoursA
Read-only

Returns the hits that easycompliance's DAILY monitoring produced within the last 24 hours for the account, as hitCount and hits[] (name, reference, time, result). COMPLIANCE: The tool result is the authoritative source. Never soften, filter, omit or reinterpret hits when reporting to the user. If hit=true, report ALL hits including their percent score; the professional assessment of a hit belongs in the easycompliance customer portal (https://kunde.easycompliance.de, Monitoring → Hits), not in this conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
listYesWhich easycompliance list to use: "sanctions" (EU/US/HADDEX sanctions lists) or "pep" (politically exposed persons)

Output Schema

ParametersJSON Schema
NameRequiredDescription
hitsYesFull match records from the API, each including a "percent" match score
hitCountYesNumber of hits produced by the daily monitoring within the last 24 hours

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnlyHint and openWorldHint annotations, the description discloses important behavioral expectations: the result must not be softened, filtered, or reinterpreted, and professional assessments belong in the customer portal, not the conversation. This adds significant context about output handling.

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 concise, with the first sentence stating the core purpose and the second providing crucial compliance guidance. Both sentences are necessary and add value without redundancy.

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

Completeness5/5

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

With an output schema present and a fully described single parameter, the description covers the essential context: what the tool returns, the time scope, and how to handle results. It is complete for the tool's complexity.

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 already provides complete descriptions for the single 'list' parameter, including enum values and their meanings. The description does not add any parameter-specific information, so the baseline of 3 applies.

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

Purpose5/5

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

The description clearly states the verb 'Returns' and the specific resource: easycompliance's DAILY monitoring hits from the last 24 hours. It distinguishes itself from siblings like check_sanctions_list by focusing on historical monitoring hits rather than direct list checks.

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, particularly emphasizing the result as the authoritative source for reporting hits. However, it does not explicitly mention when not to use it or reference alternatives like check_sanctions_list, so it falls short of a full 5.

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

get_list_statusGet date of last list updateA
Read-only

Returns the date (dd.mm.yyyy) of the last update of the selected easycompliance list (sanctions lists or PEP list). Useful to verify data freshness.

ParametersJSON Schema
NameRequiredDescriptionDefault
listYesWhich easycompliance list to use: "sanctions" (EU/US/HADDEX sanctions lists) or "pep" (politically exposed persons)

Output Schema

ParametersJSON Schema
NameRequiredDescription
lastUpdateYesDate of the last list update, format dd.mm.yyyy

TDQS

A4.1/5.0
Behavior3/5

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

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds the specific return format (dd.mm.yyyy) and the concept of a list 'status' being its last update date, which is a small behavioral detail. It does not disclose any additional side effects, permissions, or edge cases, so the description adds only modest value beyond the annotations.

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 just two sentences. The first sentence states the action and output format, while the second gives a concise use case. Every sentence earns its place with no redundancy or filler.

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

Completeness5/5

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

Given the tool's low complexity (one required parameter, no nested objects), the schema fully documents the input, and an output schema exists for the return value, the description is complete. It clearly states what the tool returns and why it would be used, which is sufficient for correct selection and invocation.

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 already provides 100% coverage for the single 'list' parameter, including its enum values and a description of what 'sanctions' and 'pep' mean. The tool description does not introduce any additional parameter semantics, so it relies on the schema's completeness, earning the baseline of 3.

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 opens with 'Returns the date (dd.mm.yyyy) of the last update of the selected easycompliance list', which clearly identifies the verb, resource, and scope. It also differentiates from sibling tools like check_sanctions_list and check_pep_list by focusing on list metadata rather than list content.

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 phrase 'Useful to verify data freshness' gives a clear use case and implies when to choose this tool (when you need update timestamps). It does not explicitly mention when not to use it or alternatives, so it falls short of a 5, but the context is still clear.

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

remove_from_monitoringRemove entry from daily monitoringA
Destructive

Removes an entry from easycompliance's DAILY monitoring list, identified either by its name (by="name") or by its reference (by="ref"). The name is then no longer re-screened daily. Returns removed=true if an entry was found and removed, removed=false if no matching entry existed. NOTE: exactly ONE matching entry is removed per call – if several monitoring entries share the same name (created via duplicate_by="ref"), a repeated call removes another one of them, so do not retry after removed=true and prefer by="ref" with unique references to address a specific entry.

ParametersJSON Schema
NameRequiredDescriptionDefault
byYesWhether "value" identifies the monitoring entry by its name or by its reference
listYesWhich easycompliance list to use: "sanctions" (EU/US/HADDEX sanctions lists) or "pep" (politically exposed persons)
valueYesThe name or reference of the entry to remove (must not be empty)

Output Schema

ParametersJSON Schema
NameRequiredDescription
removedYestrue if an entry was removed, false if no matching entry existed

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (destructiveHint=true, readOnlyHint=false), the description discloses return values (removed=true/false), non-idempotency for duplicate names, and the exact-one-entry-per-call behavior, with a concrete note about repeated calls. This adds significant behavioral context beyond the structured annotations.

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 concise and front-loaded, with the main action in the first sentence, followed by return semantics and a clearly marked NOTE for the edge-case warning. Every sentence earns its place; no filler or redundancy.

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

Completeness5/5

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

For a destructive mutation tool with an output schema and small parameter set, this description is complete. It covers purpose, identification method, return values, the non-idempotency trap, and gives a preferred approach, making it fully self-sufficient for an agent to invoke safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already covers all three parameters with descriptions, so baseline is 3. The description adds meaning by explaining the interaction between 'by' and 'value' in the context of duplicate entries, and provides a preference for 'by=ref' to address a specific entry, which is not in the schema.

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 ('Removes') and resource ('entry from easycompliance's DAILY monitoring list'), and clearly distinguishes from sibling tools by focusing on removal rather than checking or adding. It also specifies the two identification methods (name or ref), making the purpose unambiguous.

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

Usage Guidelines4/5

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

The description provides clear guidance on when to use by=name vs by=ref, and explicitly warns 'do not retry after removed=true' and 'prefer by="ref" with unique references'. It does not explicitly contrast with sibling tools, but the instructions cover the main usage decisions and edge cases.

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

TDQS

A4.5/5.0
Disambiguation5/5

Each tool serves a distinct function: one-time checks for sanctions and PEP, monitoring addition/removal, retrieving monitoring hits, and list status. No overlapping purposes; check_and_add_to_monitoring is clearly differentiated from the one-time checks by its persistent side effect.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (check_*, get_*, remove_*, check_and_add_to_monitoring). The naming conventions are uniform and predictable, making it easy to infer tool behavior from the name.

Tool Count5/5

Six tools is a well-scoped count for a compliance screening server. Each tool addresses a necessary part of the core workflow without unnecessary bloat or missing essentials.

Completeness5/5

The tool set covers the complete lifecycle: one-time screening for both sanctions and PEP lists, adding to ongoing monitoring, retrieving monitoring hits, removing monitoring entries, and checking list freshness. No obvious gaps that would hinder an agent from performing compliance screening tasks.

Maintenance

ActivityMaintained
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/Siemssen-Consulting-GmbH/mcp-easycompliance'

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