Lorikeet Security MCP Server
Point Claude — or any MCP-aware client — at your Lorikeet workspace and ask it questions in your own words. Nine tools cover penetration-test findings, asset inventory, scope, compliance posture and a curated vulnerability knowledge base.
- endpoint
- https://lorikeetsecurity.com/ptaas/mcp/
- transport
- Streamable HTTP
- auth
- OAuth 2.1 with Dynamic Client Registration, or a workspace API token
- access
- Hard-scoped to the company that owns the credential. No cross-tenant reads.
- server name
- lorikeet-mcp
What it does
The server gives an AI client read access to your security program, plus one write action: requesting a retest on a finding you believe is fixed. Every call is authenticated and strictly scoped to the company that owns the credential — there is no cross-tenant access. Tools that touch a concrete asset are checked against your scope rules before they run.
findings:write scope exists for Lory's own internal engagement path and is deliberately not grantable on workspace tokens or OAuth grants. If a client offers to file findings into your workspace, it isn't using this server.
Connecting
Claude.ai and Claude Desktop (OAuth)
- Open Settings → Connectors → Add custom connector.
- Enter
https://lorikeetsecurity.com/ptaas/mcp/and add it. - Claude registers itself (Dynamic Client Registration) and opens a Lorikeet sign-in page. Sign in and approve the consent screen.
- The tools appear in your conversation.
A grant that requests no scopes falls back to the read-only set — findings:read, kb:read, compliance:read. retest:request is never granted implicitly; ask for it explicitly if you want it.
Claude Code and custom clients (API token)
Generate a token under Dashboard → MCP Server, pick its scopes, then add it to your .mcp.json. The token is shown once at creation — only its SHA-256 is stored, so save it then.
{
"mcpServers": {
"lorikeet": {
"type": "http",
"url": "https://lorikeetsecurity.com/ptaas/mcp/",
"headers": {
"Authorization": "Bearer <your-token>"
}
}
}
}
Verify the connection from a shell — ping needs no scope, so it works with any valid credential:
curl -s -X POST https://lorikeetsecurity.com/ptaas/mcp/ \ -H "Authorization: Bearer <your-token>" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"ping","arguments":{}}}'
A healthy response echoes your company id, the token prefix and the scopes the credential actually carries — the quickest way to confirm a token was issued with the permissions you expected.
Scopes
Four scopes are grantable, on both workspace tokens and OAuth grants. A credential only sees the tools its scopes allow — a tool you lack the scope for is absent from tools/list rather than failing at call time.
| Scope | Grants |
|---|---|
| findings:read | Read findings, assets, and scope verdicts |
| kb:read | Search the vulnerability knowledge base |
| compliance:read | Read compliance frameworks and control status |
| retest:request | Submit a retest request against a finding |
| (none) | ping requires no scope |
Tools
| Tool | Scope | Type | Description |
|---|---|---|---|
| findings.list | findings:read | read | List pentest findings. Filter by severity, status, or asset. Returns at most 50 rows (default 25). |
| findings.get | findings:read | read | The full body of one finding: description, attack scenario, remediation, CWE, CVSS and evidence. |
| asm.assets | findings:read | read | The distinct assets appearing on your findings, each with its current scope verdict. |
| scope.check | findings:read | read | Whether a domain, URL or IP is in_scope, out_of_scope or unknown for your company. |
| kb.search | kb:read | read | Free-text search of the knowledge base (OWASP ASVS, WSTG, Top 10; MITRE CWE and CAPEC). Up to 25 hits (default 10). |
| compliance.frameworks | compliance:read | read | Readiness summary per framework — SOC 2, ISO 27001, ISO 42001, PCI DSS — with control counts and percent complete. |
| compliance.controls | compliance:read | read | Controls for one framework with your status, owner and due date. Call compliance.frameworks first for the framework keys. |
| retest.request | retest:request | write | Ask the Lorikeet team to re-test a finding. Does not modify the finding. Re-requesting one that already has an open retest returns the existing request. |
| ping | none | read | Health check. Returns server time, your company id, the token prefix and the granted scopes. |
Limits and response shapes
- List calls are capped.
findings.listreturns at most 50 rows,kb.searchat most 25. Both take alimitargument; anything higher is clamped rather than rejected. - Lists are summaries.
findings.listreturns id, title, severity and status. Fetch the full body withfindings.get— don't try to page a whole report out of the list call. - Scanner findings are excluded.
findings.listexposes PTaaS pentest findings only. Retired ASM scanner output is not surfaced over MCP. - AI findings await review. Findings produced by Lory are held in a review queue and only become readable once a Lorikeet pentester has approved them.
- Responses are JSON in a text block. Every tool returns its payload as pretty-printed JSON inside a single MCP text content block.
Billing
MCP calls draw from your prepaid credit balance at 0.1 credit per tool call ($1 = 1 credit), and roll up to your monthly invoice alongside engagement usage. Per-tool call counts, average latency and your current balance are in Dashboard → Usage & Credits.
Auditing
Every call is written to the MCP audit log: the method and tool, the scopes used, a hash and redacted copy of the input, a summary of the output, status and error code, duration, source IP and user agent. Tokens are SHA-256 hashed at rest and revocable at any time from the dashboard — revoking takes effect on the next call.
Example prompts
- "Show me every open critical finding from our last pentest and explain the remediation for each."
- "Is
api.example.comin scope for our current engagement?" - "Which SOC 2 controls are still not started, and who owns them?"
- "Search the knowledge base for CWE-89 and summarise the attack scenario."
- "We shipped a fix for finding 1423 — request a retest."
- "List every asset with an open high or critical finding against it."
Troubleshooting
| Symptom | Cause and fix |
|---|---|
401 with a WWW-Authenticate header | Missing or expired credential. For OAuth, re-authorize the connector; for token clients, issue a new token in the dashboard. |
| A tool is missing from the list | Your credential lacks that tool's scope. Tools you can't call are hidden rather than shown-and-failing. Re-issue the token with the scope you need. |
| An OAuth grant only has read tools | The client requested no scopes, so it fell back to the read-only default. retest:request is never granted implicitly — request it explicitly. |
out_of_scope errors | The target isn't covered by an in-scope rule. Add it under Scope Settings, or call scope.check first to confirm before acting. |
| "Finding not found" | The id belongs to another workspace, or the finding is a Lory result still awaiting human review. Calls are scoped to your company only. |
| An agent claims it can file findings | It can't — not through this server. findings:write is not grantable on customer credentials. |
Legal and support
- Privacy Policy: lorikeetsecurity.com/privacy-policy
- Terms of Service: lorikeetsecurity.com/tos
- Support: support@lorikeetsecurity.com
- More on the AI pentester behind these findings: lorikeetsecurity.com/lory