Tools Reference
SecCheck exposes seven tools. All are read-only — they look content up and return it; none mutate your project, your systems, or any server-side state. None of them makes an outbound call: every answer comes from the corpus embedded in the server.
| Tool | One-liner |
|---|---|
list_sources | Which libraries exist, how big are they, what do they cover? |
search_skills | Find playbooks by keyword, category, framework or tag. |
load_skill | Read one full playbook. |
list_skill_resources | Which bundled files ship with a playbook? (Pro) |
read_skill_resource | Read one bundled script / payload / reference. (Pro) |
license_status | What does my credential unlock? |
get_attribution | Third-party licences and required notices. |
The response contract
Every tool that returns structured data answers in exactly two lines:
<VERDICT LINE — states the outcome in words>
<one-line compact JSON payload>
This is deliberate. A model reads the first line, so the first line has to carry
the answer. The distinct prefixes — FOUND, NO MATCH, AVAILABLE,
RESOURCES, EDITION, ATTRIBUTION — are what let an agent tell "nothing
matched your query" apart from "no such thing exists", which is the difference
between a retry and a wrong conclusion.
load_skill and read_skill_resource are the exceptions: they return the
document itself, since that is the answer.
Failures come back as tool results beginning error: , not as JSON-RPC
protocol errors — models recover from a readable tool result far better than from
a transport-level failure.
list_sources
List the skill libraries, their skill counts, and the category breakdown. Call this first to see what the server actually holds.
Parameters — none.
Returns
AVAILABLE: 857 playbooks across 3 libraries (43 compliance, 745 defensive, 69 offensive). Edition: community.
{
"total_skills": 857,
"by_category": { "compliance": 43, "defensive": 745, "offensive": 69 },
"sources": [
{
"key": "cybersecurity",
"label": "Cybersecurity Skills",
"description": "817-skill offensive+defensive library, mapped to MITRE ATT&CK/ATLAS/D3FEND, NIST CSF/AI-RMF, and F3.",
"skill_count": 817,
"categories": { "compliance": 13, "defensive": 745, "offensive": 59 },
"available": true,
"unlocked": true
},
{ "key": "grc", "label": "GRC & Compliance Skills", "skill_count": 30, "categories": { "compliance": 30 }, "unlocked": true },
{ "key": "pentesterflow", "label": "PentesterFlow CLI Skills", "skill_count": 10, "categories": { "offensive": 10 }, "unlocked": true }
],
"edition": "community"
}
Only sources your credential unlocks are listed — a private or custom skill pack you have not been granted simply does not appear.
search_skills
Search every unlocked library and get back compact matches. This is the entry point for almost every task: find the playbook, then load it.
Parameters — all optional. Filters are ANDed.
| Name | Required | Description |
|---|---|---|
query | ➖ | Free-text keywords, e.g. dns exfiltration, kerberoasting, GDPR data subject rights. |
source | ➖ | Restrict to one library: cybersecurity, grc, pentesterflow. |
category | ➖ | offensive (red-team/pentest), defensive (blue-team/DFIR), compliance (GRC/regulatory). |
framework | ➖ | Framework label, e.g. MITRE ATT&CK, NIST CSF, GDPR, PCI DSS, ISO 27001. |
tag | ➖ | A frontmatter tag, e.g. splunk, kubernetes, active-directory. |
limit | ➖ | Max results. Default 20, maximum 100. |
Omitting query and passing only filters is a valid listing call — for
example "every compliance playbook in the GRC library".
Example
{ "query": "kerberoasting", "limit": 3 }
Returns
FOUND: 3 playbook(s). Load the most relevant with load_skill(id).
{
"count": 3,
"results": [
{
"id": "cybersecurity/detecting-kerberoasting-attacks",
"name": "detecting-kerberoasting-attacks",
"source": "cybersecurity",
"category": "defensive",
"frameworks": ["MITRE ATT&CK", "NIST CSF", "MITRE D3FEND"],
"tags": ["threat-hunting", "kerberoasting", "credential-access", "kerberos", "t1558"],
"description": "Detect Kerberoasting attacks by monitoring for anomalous Kerberos TGS requests targeting service accounts with SPNs for offline password cracking."
},
{
"id": "cybersecurity/exploiting-kerberoasting-with-impacket",
"category": "offensive",
"frameworks": ["MITRE ATT&CK", "NIST CSF", "MITRE D3FEND"],
"description": "Perform Kerberoasting attacks using Impacket's GetUserSPNs to extract and crack Kerberos TGS tickets for Active Directory service accounts."
}
// …
]
}
Descriptions are truncated to 300 characters — enough for the agent to choose, not enough to substitute for loading the playbook.
How results are ranked. Matches are scored per query token and sorted highest-first, so the most on-topic playbook comes back at the top:
| Where the token matches | Score |
|---|---|
| The skill name, exactly | +100 |
| Anywhere in the skill name | +5 |
| A tag | +3 |
| A framework label | +3 |
| The subdomain | +2 |
| The description | +1 |
Because scoring is additive across tokens, a long natural-language query still
returns something — often only weakly related. If the top result's description
does not clearly match the task, narrow with category or framework rather
than adding more words.
When genuinely nothing matches, the verdict line is explicit:
NO MATCH: no playbook matched this query. Try broader keywords, or drop the source/category/framework filters — the library is not exhaustive of all security work.
load_skill
Return the full SKILL.md playbook for an id returned by search_skills —
typically when to use it, its prerequisites and its steps, plus any verification
or validation criteria it carries.
Parameters
| Name | Required | Description |
|---|---|---|
id | ✅ | Skill id in the form <source>/<name>, e.g. cybersecurity/analyzing-dns-logs-for-exfiltration. |
Returns — the Markdown document itself, frontmatter included.
When a playbook ships bundled resources, a footer is appended. On Community that footer is count-only, disclosing no paths or file sizes:
---
_3 runnable bundled resource(s) ship with this skill; unlock them with a Pro license (read_skill_resource)._
With Pro or Enterprise it becomes the full inventory (paths and sizes), the same
data list_skill_resources returns.
Errors
error: unknown skill id "cybersecurity/does-not-exist" (use search_skills to find valid ids)
Always take the id from search_skills rather than guessing it from a skill
name you saw elsewhere.
list_skill_resources
List the bundled reference, script and payload files that ship alongside a playbook — relative paths and sizes.
On Community this returns an error: explaining the paywall. All 857 playbooks
stay free to search and load; it is the runnable material that is licensed.
Parameters
| Name | Required | Description |
|---|---|---|
id | ✅ | Skill id from search_skills. |
Returns
RESOURCES: 3 bundled file(s) ship with grc/iso27001. Fetch one with read_skill_resource.
{
"id": "grc/iso27001",
"resources": [
{ "path": "references/annex-a-2013.md", "size": 7753 },
{ "path": "references/annex-a-2022.md", "size": 10131 },
{ "path": "references/control-mapping.md", "size": 7001 }
]
}
read_skill_resource
Read one bundled resource file that ships with a playbook.
Same paywall as list_skill_resources.
Parameters
| Name | Required | Description |
|---|---|---|
id | ✅ | Skill id from search_skills. |
path | ✅ | A relative path as returned by list_skill_resources, e.g. references/standards.md or payloads/jinja2.txt. |
Returns — the file contents.
Paths are resolved strictly inside the skill's own directory, and symlinks are never listed or served, so a resource path cannot be used to read anything outside the playbook it belongs to.
license_status
Report your active edition and exactly which sources and capabilities your credential unlocks. Useful when a tool unexpectedly returns a paywall error.
Parameters — none.
Returns
EDITION: community — playbooks only.
{
"tier": "community",
"unlocked_sources": { "cybersecurity": true, "grc": true, "pentesterflow": true },
"bundled_resources": false,
"audit_log": false,
"usage_metering": false,
"status": "Hosted: capabilities are provisioned on your Cert-IX API key"
}
The values describe the caller, not the operator. Hosted, they are resolved from your API key by the Cert-IX edge on every request — see Security & data handling.
get_attribution
Return the third-party attribution and licence for each bundled library, including the full licence texts. This is the notice you must reproduce if you redistribute any of the content.
Parameters — none.
Returns
ATTRIBUTION: 3 third-party sources, redistributed under their own permissive licences.
{
"notice": "This product redistributes third-party skill content under the licences below. All rights of the original authors are retained. Full licence texts are included.",
"sources": [
{ "source": "cybersecurity", "upstream": "Anthropic-Cybersecurity-Skills", "author": "mahipal (community project)", "license": "Apache-2.0", "homepage": "https://github.com/mukul975/Anthropic-Cybersecurity-Skills" },
{ "source": "grc", "upstream": "Claude-Skills-Governance-Risk-and-Compliance", "author": "Hemant Naik (Sushegaad)", "license": "MIT", "homepage": "https://github.com/Sushegaad/Claude-Skills-Governance-Risk-and-Compliance" },
{ "source": "pentesterflow", "upstream": "PentesterFlow", "author": "PentesterFlow", "license": "Apache-2.0", "homepage": "https://github.com/pentesterflow/agent" }
],
"license_texts": { "cybersecurity": "Apache License…", "grc": "MIT License…", "pentesterflow": "Apache License…" }
}
An SPDX identifier and a homepage are a reference, not a notice — so the full text ships with the answer rather than expecting you to go and find the upstream repository.
Capability matrix
| Tool | Community | Pro | Enterprise |
|---|---|---|---|
list_sources | ✅ | ✅ | ✅ |
search_skills | ✅ | ✅ | ✅ |
load_skill | ✅ | ✅ | ✅ |
list_skill_resources | — | ✅ | ✅ |
read_skill_resource | — | ✅ | ✅ |
license_status | ✅ | ✅ | ✅ |
get_attribution | ✅ | ✅ | ✅ |
See Agent workflows for how to wire these into an agent's loop so it reaches for a playbook by default instead of improvising.
Cette page vous a-t-elle été utile ?