mcp-easycompliance
OfficialThe mcp-easycompliance server lets AI agents screen names against sanctions and PEP lists and manage daily monitoring via the easycompliance platform. Key capabilities:
One-time sanctions screening (
check_sanctions_list): Checks names against EU/US/HADDEX sanctions lists.One-time PEP screening (
check_pep_list): Checks names against the politically exposed persons list.Retrieve recent monitoring hits (
get_hits_last_24h): Gets hits from daily monitoring in the last 24 hours for sanctions or PEP.Check list freshness (
get_list_status): Returns the last update date of the sanctions or PEP list.Screen and add to monitoring (
check_and_add_to_monitoring): Screens a name and enrolls it in daily monitoring for ongoing re-screening; supports optional search accuracy (50-100%) and reference/duplicate controls.Remove from monitoring (
remove_from_monitoring): Removes an entry from daily monitoring by name or reference.Deployment & integration: Runs locally via
npx(stdio) for Claude Desktop/Code/Cursor, or as a remote/self-hosted HTTP endpoint; consumes the easycompliance REST API and counts toward account API quota.Security & compliance: Does not log names, screening data, or API keys; HTTP authentication via
X-API-Key; results clearly indicate hits and are not softened.
Click on "Install 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., "@mcp-easycomplianceCheck if John Doe is on the EU sanctions list."
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.
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 |
| read-only | One-time screening of a name against the EU/US/HADDEX sanctions lists |
| read-only | One-time screening of a name against the PEP list (politically exposed persons) |
| read-only | Hits produced by the daily monitoring within the last 24 hours |
| read-only | Date (dd.mm.yyyy) of the last update of the selected list |
| write | Screens the name and adds it to the account's daily monitoring list |
| 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
hitistrue, 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_monitoringhas a persistent side effect (the name is re-screened daily and counts towards the account's monitoring quota);remove_from_monitoringremoves monitoring entries. Both are clearly marked as write tools (noreadOnlyHint), so MCP clients can require confirmation.remove_from_monitoringremoves 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. Useby="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 |
| yes (stdio) | – | API key provided by easycompliance customer service |
| no |
| Sanctions list API endpoint |
| no |
| 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-easycomplianceCursor
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-Keyrequest 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.1only; 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 /healthzreturns200 okfor 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 transportResources
License
Available Tools
6 toolscheck_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.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Your own reference, e.g. a customer, supplier or employee number | |
| list | Yes | Which easycompliance list to use: "sanctions" (EU/US/HADDEX sanctions lists) or "pep" (politically exposed persons) | |
| name | Yes | Name of the person or organization to screen and monitor (UTF-8) | |
| accuracy | No | Search accuracy between 50 and 100 (percent). If not set, the search pattern configured for the easycompliance account is used. | |
| duplicate_by | No | Whether an entry is considered a duplicate by its name (default) or by its reference. "ref" requires a non-empty ref. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hit | Yes | true if the screening produced at least one potential match |
| ref | Yes | The reference that was sent along, empty if none |
| hits | Yes | Full match records from the API, each including a "percent" match score |
| name | Yes | The screened name (as sent to the API) |
| hitCount | Yes | Number of potential matches |
TDQS
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.
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.
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.
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.
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.
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 listARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the person or organization to screen (UTF-8) | |
| accuracy | No | Search accuracy between 50 and 100 (percent). If not set, the search pattern configured for the easycompliance account is used. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hit | Yes | true if the screening produced at least one potential match |
| ref | Yes | The reference that was sent along, empty if none |
| hits | Yes | Full match records from the API, each including a "percent" match score |
| name | Yes | The screened name (as sent to the API) |
| hitCount | Yes | Number of potential matches |
TDQS
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.
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.
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.
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.
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.
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 listsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the person or organization to screen (UTF-8) | |
| accuracy | No | Search accuracy between 50 and 100 (percent). If not set, the search pattern configured for the easycompliance account is used. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hit | Yes | true if the screening produced at least one potential match |
| ref | Yes | The reference that was sent along, empty if none |
| hits | Yes | Full match records from the API, each including a "percent" match score |
| name | Yes | The screened name (as sent to the API) |
| hitCount | Yes | Number of potential matches |
TDQS
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.
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.
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.
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.
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.
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 hoursARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| list | Yes | Which easycompliance list to use: "sanctions" (EU/US/HADDEX sanctions lists) or "pep" (politically exposed persons) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | Yes | Full match records from the API, each including a "percent" match score |
| hitCount | Yes | Number of hits produced by the daily monitoring within the last 24 hours |
TDQS
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.
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.
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.
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.
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.
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 updateARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| list | Yes | Which easycompliance list to use: "sanctions" (EU/US/HADDEX sanctions lists) or "pep" (politically exposed persons) |
Output Schema
| Name | Required | Description |
|---|---|---|
| lastUpdate | Yes | Date of the last list update, format dd.mm.yyyy |
TDQS
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.
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.
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.
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.
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.
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 monitoringADestructive
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.
| Name | Required | Description | Default |
|---|---|---|---|
| by | Yes | Whether "value" identifies the monitoring entry by its name or by its reference | |
| list | Yes | Which easycompliance list to use: "sanctions" (EU/US/HADDEX sanctions lists) or "pep" (politically exposed persons) | |
| value | Yes | The name or reference of the entry to remove (must not be empty) |
Output Schema
| Name | Required | Description |
|---|---|---|
| removed | Yes | true if an entry was removed, false if no matching entry existed |
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
EU compliance checks for AI agents: sanctions, company, VAT ID, IBAN, email. Pay per call.
Entity verification, sanctions screening, and trust scoring for AI agents.
Sanctions screening, KYB, identifier validation, jurisdiction risk & secret scanning for AI agents
OFAC, LEI, EU VAT, AI Act, and company compliance preflight for agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for sanctions screening and PEP checks via OpenSanctions API. Search entities, match against 320+ sanctions lists, and run compound compliance investigations with AI agents.657MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to perform identity verification, KYC/KYB, PEP & sanctions screening, bank statement analysis, and workflow automation via the Model Context Protocol.MIT
- AlicenseBqualityBmaintenanceAutonomous M2M compliance and trust APIs for AI agents (KYB, OFAC, VAT, Sanctions checking).5MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to access official European business data across 15 EU countries, including company lookups, VAT validation, sanctions screening, and KYB reports.11,5021MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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