{
  "info": {
    "name": "Lorikeet Security — MCP Server",
    "description": "The Lorikeet Security MCP server over streamable HTTP (JSON-RPC 2.0). Connect any MCP-aware agent to your workspace to query findings, the vulnerability KB, asset scope, and compliance data.\n\nEndpoint: https://lorikeetsecurity.com/ptaas/mcp/\n\nAuth: send a workspace API token as `Authorization: Bearer lkmcp_...` (issue one on the MCP Server page, https://lorikeetsecurity.com/talon/dashboard/mcp). `initialize` and `ping` may proceed unauthenticated; every other tool enforces the token plus the tool's own required scope.\n\nUsage: run `initialize` first — it captures the `Mcp-Session-Id` response header into a collection variable that the later requests reuse. Then `tools/list` for the full tool schemas, and `tools/call` to invoke one.\n\nFull reference: https://lorikeetsecurity.com/talon/dashboard/mcp-docs",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    { "key": "mcpUrl", "value": "https://lorikeetsecurity.com/ptaas/mcp/", "type": "string" },
    { "key": "lkmcp_token", "value": "lkmcp_xxxxxxxxxxxxxxxxxxxxxxxx", "type": "string", "description": "Workspace MCP token — issued on the MCP Server page, shown only once." },
    { "key": "mcpSessionId", "value": "", "type": "string", "description": "Auto-populated by the initialize request's test script." }
  ],
  "item": [
    {
      "name": "Discovery probe (unauthenticated)",
      "request": {
        "method": "GET",
        "header": [{ "key": "Accept", "value": "application/json" }],
        "url": { "raw": "{{mcpUrl}}", "host": ["{{mcpUrl}}"] },
        "description": "Sanity-check the URL before issuing a token. Returns server name, version, transport, the exposed tool names, and the scope catalogue."
      }
    },
    {
      "name": "initialize",
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "const sid = pm.response.headers.get('Mcp-Session-Id');",
              "if (sid) { pm.collectionVariables.set('mcpSessionId', sid); }",
              "pm.test('has result', () => pm.expect(pm.response.text()).to.include('protocolVersion'));"
            ]
          }
        }
      ],
      "request": {
        "method": "POST",
        "header": [
          { "key": "Content-Type", "value": "application/json" },
          { "key": "Accept", "value": "application/json, text/event-stream" },
          { "key": "Authorization", "value": "Bearer {{lkmcp_token}}" }
        ],
        "url": { "raw": "{{mcpUrl}}", "host": ["{{mcpUrl}}"] },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 1,\n  \"method\": \"initialize\",\n  \"params\": {\n    \"protocolVersion\": \"2025-03-26\",\n    \"capabilities\": {},\n    \"clientInfo\": { \"name\": \"postman\", \"version\": \"1.0.0\" }\n  }\n}"
        },
        "description": "JSON-RPC handshake. Captures the Mcp-Session-Id response header for reuse."
      }
    },
    {
      "name": "tools/list",
      "request": {
        "method": "POST",
        "header": [
          { "key": "Content-Type", "value": "application/json" },
          { "key": "Accept", "value": "application/json, text/event-stream" },
          { "key": "Authorization", "value": "Bearer {{lkmcp_token}}" },
          { "key": "Mcp-Session-Id", "value": "{{mcpSessionId}}" }
        ],
        "url": { "raw": "{{mcpUrl}}", "host": ["{{mcpUrl}}"] },
        "body": {
          "mode": "raw",
          "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 2,\n  \"method\": \"tools/list\"\n}"
        },
        "description": "List every tool with its full input schema and required scope."
      }
    },
    {
      "name": "tools/call — ping",
      "request": {
        "method": "POST",
        "header": [
          { "key": "Content-Type", "value": "application/json" },
          { "key": "Accept", "value": "application/json, text/event-stream" },
          { "key": "Authorization", "value": "Bearer {{lkmcp_token}}" },
          { "key": "Mcp-Session-Id", "value": "{{mcpSessionId}}" }
        ],
        "url": { "raw": "{{mcpUrl}}", "host": ["{{mcpUrl}}"] },
        "body": { "mode": "raw", "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 3,\n  \"method\": \"tools/call\",\n  \"params\": { \"name\": \"ping\", \"arguments\": {} }\n}" },
        "description": "Liveness check."
      }
    },
    {
      "name": "tools/call — findings.list",
      "request": {
        "method": "POST",
        "header": [
          { "key": "Content-Type", "value": "application/json" },
          { "key": "Accept", "value": "application/json, text/event-stream" },
          { "key": "Authorization", "value": "Bearer {{lkmcp_token}}" },
          { "key": "Mcp-Session-Id", "value": "{{mcpSessionId}}" }
        ],
        "url": { "raw": "{{mcpUrl}}", "host": ["{{mcpUrl}}"] },
        "body": { "mode": "raw", "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 4,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"findings.list\",\n    \"arguments\": { \"severity\": \"critical\" }\n  }\n}" },
        "description": "List findings in your workspace (filterable). Requires the findings read scope."
      }
    },
    {
      "name": "tools/call — scope.check",
      "request": {
        "method": "POST",
        "header": [
          { "key": "Content-Type", "value": "application/json" },
          { "key": "Accept", "value": "application/json, text/event-stream" },
          { "key": "Authorization", "value": "Bearer {{lkmcp_token}}" },
          { "key": "Mcp-Session-Id", "value": "{{mcpSessionId}}" }
        ],
        "url": { "raw": "{{mcpUrl}}", "host": ["{{mcpUrl}}"] },
        "body": { "mode": "raw", "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 5,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"scope.check\",\n    \"arguments\": { \"target\": \"api.acme.io\" }\n  }\n}" },
        "description": "Verify whether a target is in scope for testing before touching it."
      }
    },
    {
      "name": "tools/call — kb.search",
      "request": {
        "method": "POST",
        "header": [
          { "key": "Content-Type", "value": "application/json" },
          { "key": "Accept", "value": "application/json, text/event-stream" },
          { "key": "Authorization", "value": "Bearer {{lkmcp_token}}" },
          { "key": "Mcp-Session-Id", "value": "{{mcpSessionId}}" }
        ],
        "url": { "raw": "{{mcpUrl}}", "host": ["{{mcpUrl}}"] },
        "body": { "mode": "raw", "raw": "{\n  \"jsonrpc\": \"2.0\",\n  \"id\": 6,\n  \"method\": \"tools/call\",\n  \"params\": {\n    \"name\": \"kb.search\",\n    \"arguments\": { \"query\": \"SSRF\" }\n  }\n}" },
        "description": "Search the vulnerability knowledge base."
      }
    }
  ]
}
