About complydir
complydir is an MCP server and CLI for searching a curated catalog of compliance consultancies, auditors, and software. It filters a catalog snapshot locally with exact tag matching and can queue new listings for review.
Key features
- 01Search by framework, region, and industry
- 02Apply exact tag filters across frameworks
- 03Check company listings and service details
- 04List catalog categories and counts
- 05Submit a listing for review
Use cases
- 01Find services matching compliance frameworks and region
- 02Check whether a company appears in the catalog
- 03Review a service record or category counts
- 04Queue a compliance service listing
MCP support
Exposes catalog search, listing checks, service details, categories, and listing submission tools to MCP clients.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
5Saved tool list · updated 1w ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | integer | No | Maximum number of results to return (optional). |
| query | string | No | Search query text. |
| region | string | No | Region filter (optional). |
| industry | string | No | Industry filter (optional). |
| framework | string | No | Compliance framework name. |
| frameworks | array | No | Compliance framework names. |
| service_type | string | No | The service type for this call. |
Details
From the project READMEcomplydir
A directory of compliance help, searchable from your agent. complydir wraps a curated catalog of services that work on ISO 27001, SOC 2, DORA and neighbouring frameworks — consultancies, auditors and software — published as a single catalog snapshot. There is no account and no API key: the tools fetch the snapshot, answer questions about it locally, and can queue a new free listing for review.
Because search happens over the snapshot rather than a remote search call, the filter rules are exact and predictable. Tag filters never do substring matching: asking for the region "Germany" returns services tagged Germany, and asking for two frameworks returns only services tagged with both.
Tools
search_services— multi-filter catalog search. All parameters are optional, but at least one is required:query(free text used to rank the filtered set),framework(a single framework),frameworks(several frameworks, ANDed together),region,industry,service_type, andlimit(1–25, default 10). Tag matches are case-insensitive and exact, and aservice_typeof "Consulting" also matches services tagged "Consultants". For example,frameworks["ISO 27001", "DORA"]with region "Germany" and service_type "Consulting" returns German services covering both frameworks that consult.check_if_listed— whether a company is in the catalog. Takes a requiredcompany_name(for example "Scrut Automation") and answers with the matched record when it is listed.get_service_details— the full catalog record for one service, by its requiredservice_name(for example "Compleye").list_categories— the distinct values in one dimension of the catalog, with counts.dimensionis one offrameworks,regions,industries,service_typesorproblems; omit it to get every dimension at once.submit_listing— queue a free listing (the one write tool). Required:name,url(http or https),email(a contact address, not shown publicly) andbrief_summary(10–300 characters). Optional:description,linkedin,service_type,region_coveredandcompliance_framework_expertise. Confirm the name, website, contact email and one-line summary with the user before calling — a queued listing goes into the same review queue as the free web form and is not live instantly.
How it works
The read tools fetch the public snapshot from
https://ismsdirectory.com/api/tools.json and run
over it in memory; submit_listing posts to
https://ismsdirectory.com/api/submit. Both go
through one injectable fetch function, which is how
the test suite exercises everything against a small
hand-built snapshot with no live calls.
Two shapes are labelled reconstructions, because the published material pins the fields rather than the record layout: the per-service record fields beyond a service's name and its framework, region, industry and service-type tags, and the tools' output objects. Outputs are built around the pinned fields — the service name, its tags and the filters that matched.
Failures read plainly: a non-2xx upstream reply is
complydir error: HTTP <status>, an unreachable
upstream is complydir unreachable, and a snapshot
that does not parse as a list of records is
complydir snapshot invalid.
CLI
Each tool is a subcommand taking one JSON argument string:
npx @reneturcios/complydir search_services '{"frameworks":["ISO 27001","DORA"],"region":"Germany","service_type":"Consulting"}'
npx @reneturcios/complydir check_if_listed '{"company_name":"Scrut Automation"}'
npx @reneturcios/complydir get_service_details '{"service_name":"Compleye"}'
npx @reneturcios/complydir list_categories '{"dimension":"frameworks"}'
npx @reneturcios/complydir submit_listing '{"name":"Acme Compliance","url":"https://acme.example","email":"[email protected]","brief_summary":"ISO 27001 consulting for SaaS"}'
npx @reneturcios/complydir --version
Exit codes: 0 on success, 1 on a runtime error,
2 on a usage error.
MCP server
npx -y @reneturcios/complydir mcp
MCP client config:
{
"mcpServers": {
"complydir": {
"command": "npx",
"args": ["-y", "@reneturcios/complydir", "mcp"]
}
}
}
Docker
docker run -i ghcr.io/cloudcorprecords/complydir
docker run --rm ghcr.io/cloudcorprecords/complydir list_categories '{"dimension":"regions"}'
Development
npm install
npm run build # tsc -> dist/
npm test # tsx --test test/*.test.ts (fake fetch only, no network)
npm run dev # run the CLI from source
License
MIT — Copyright (c) 2026 Rene Turcios
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.