@orygn/opa-mcp 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +339 -3
- package/README.md +71 -72
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +8 -3
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +57 -15
- package/dist/config.js.map +1 -1
- package/dist/lib/bundle-signatures.d.ts +23 -0
- package/dist/lib/bundle-signatures.d.ts.map +1 -0
- package/dist/lib/bundle-signatures.js +152 -0
- package/dist/lib/bundle-signatures.js.map +1 -0
- package/dist/lib/child-env.d.ts +9 -2
- package/dist/lib/child-env.d.ts.map +1 -1
- package/dist/lib/child-env.js +38 -6
- package/dist/lib/child-env.js.map +1 -1
- package/dist/lib/conftest-cli.d.ts +25 -10
- package/dist/lib/conftest-cli.d.ts.map +1 -1
- package/dist/lib/conftest-cli.js +152 -33
- package/dist/lib/conftest-cli.js.map +1 -1
- package/dist/lib/install-id.d.ts.map +1 -1
- package/dist/lib/install-id.js +18 -3
- package/dist/lib/install-id.js.map +1 -1
- package/dist/lib/json-stream.d.ts +26 -0
- package/dist/lib/json-stream.d.ts.map +1 -0
- package/dist/lib/json-stream.js +69 -0
- package/dist/lib/json-stream.js.map +1 -0
- package/dist/lib/opa-cli.d.ts +64 -16
- package/dist/lib/opa-cli.d.ts.map +1 -1
- package/dist/lib/opa-cli.js +98 -28
- package/dist/lib/opa-cli.js.map +1 -1
- package/dist/lib/opa-paths.d.ts +24 -0
- package/dist/lib/opa-paths.d.ts.map +1 -0
- package/dist/lib/opa-paths.js +97 -0
- package/dist/lib/opa-paths.js.map +1 -0
- package/dist/lib/regal-cli.d.ts +16 -1
- package/dist/lib/regal-cli.d.ts.map +1 -1
- package/dist/lib/regal-cli.js +40 -6
- package/dist/lib/regal-cli.js.map +1 -1
- package/dist/lib/rego-ast-walker.d.ts.map +1 -1
- package/dist/lib/rego-ast-walker.js +141 -17
- package/dist/lib/rego-ast-walker.js.map +1 -1
- package/dist/lib/rego-counterexample.d.ts +1 -1
- package/dist/lib/rego-counterexample.d.ts.map +1 -1
- package/dist/lib/rego-counterexample.js +23 -5
- package/dist/lib/rego-counterexample.js.map +1 -1
- package/dist/lib/rego-ir.d.ts +32 -2
- package/dist/lib/rego-ir.d.ts.map +1 -1
- package/dist/lib/rego-smt-encoder.d.ts +53 -5
- package/dist/lib/rego-smt-encoder.d.ts.map +1 -1
- package/dist/lib/rego-smt-encoder.js +192 -26
- package/dist/lib/rego-smt-encoder.js.map +1 -1
- package/dist/lib/rego-type-inferencer.d.ts +1 -1
- package/dist/lib/rego-type-inferencer.d.ts.map +1 -1
- package/dist/lib/rego-type-inferencer.js +3 -3
- package/dist/lib/rego-type-inferencer.js.map +1 -1
- package/dist/lib/rego-verify-engine.d.ts.map +1 -1
- package/dist/lib/rego-verify-engine.js +109 -77
- package/dist/lib/rego-verify-engine.js.map +1 -1
- package/dist/lib/rego-z3.d.ts +10 -0
- package/dist/lib/rego-z3.d.ts.map +1 -1
- package/dist/lib/rego-z3.js +38 -0
- package/dist/lib/rego-z3.js.map +1 -1
- package/dist/lib/security.d.ts +8 -0
- package/dist/lib/security.d.ts.map +1 -1
- package/dist/lib/security.js +130 -54
- package/dist/lib/security.js.map +1 -1
- package/dist/resources/patterns.d.ts +1 -1
- package/dist/resources/patterns.d.ts.map +1 -1
- package/dist/resources/patterns.js +40 -12
- package/dist/resources/patterns.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +10 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/bundles/build.d.ts.map +1 -1
- package/dist/tools/bundles/build.js +12 -4
- package/dist/tools/bundles/build.js.map +1 -1
- package/dist/tools/bundles/sign.d.ts +9 -2
- package/dist/tools/bundles/sign.d.ts.map +1 -1
- package/dist/tools/bundles/sign.js +145 -19
- package/dist/tools/bundles/sign.js.map +1 -1
- package/dist/tools/bundles/verify.d.ts +1 -1
- package/dist/tools/bundles/verify.d.ts.map +1 -1
- package/dist/tools/bundles/verify.js +58 -19
- package/dist/tools/bundles/verify.js.map +1 -1
- package/dist/tools/conftest/pull.d.ts.map +1 -1
- package/dist/tools/conftest/pull.js +24 -10
- package/dist/tools/conftest/pull.js.map +1 -1
- package/dist/tools/conftest/push.d.ts.map +1 -1
- package/dist/tools/conftest/push.js +17 -7
- package/dist/tools/conftest/push.js.map +1 -1
- package/dist/tools/conftest/test.d.ts +10 -6
- package/dist/tools/conftest/test.d.ts.map +1 -1
- package/dist/tools/conftest/test.js +47 -24
- package/dist/tools/conftest/test.js.map +1 -1
- package/dist/tools/conftest/verify.d.ts +10 -6
- package/dist/tools/conftest/verify.d.ts.map +1 -1
- package/dist/tools/conftest/verify.js +30 -18
- package/dist/tools/conftest/verify.js.map +1 -1
- package/dist/tools/evaluation/bench.d.ts +16 -0
- package/dist/tools/evaluation/bench.d.ts.map +1 -1
- package/dist/tools/evaluation/bench.js +30 -5
- package/dist/tools/evaluation/bench.js.map +1 -1
- package/dist/tools/evaluation/exec.d.ts +16 -0
- package/dist/tools/evaluation/exec.d.ts.map +1 -1
- package/dist/tools/evaluation/exec.js +35 -2
- package/dist/tools/evaluation/exec.js.map +1 -1
- package/dist/tools/evaluation/test-multiroot.d.ts +4 -0
- package/dist/tools/evaluation/test-multiroot.d.ts.map +1 -1
- package/dist/tools/evaluation/test-multiroot.js +12 -2
- package/dist/tools/evaluation/test-multiroot.js.map +1 -1
- package/dist/tools/evaluation/test.d.ts +45 -0
- package/dist/tools/evaluation/test.d.ts.map +1 -1
- package/dist/tools/evaluation/test.js +146 -27
- package/dist/tools/evaluation/test.js.map +1 -1
- package/dist/tools/helpers/coverage-gaps.d.ts +11 -3
- package/dist/tools/helpers/coverage-gaps.d.ts.map +1 -1
- package/dist/tools/helpers/coverage-gaps.js +4 -3
- package/dist/tools/helpers/coverage-gaps.js.map +1 -1
- package/dist/tools/helpers/explain-undefined.d.ts +9 -3
- package/dist/tools/helpers/explain-undefined.d.ts.map +1 -1
- package/dist/tools/helpers/explain-undefined.js +83 -51
- package/dist/tools/helpers/explain-undefined.js.map +1 -1
- package/dist/tools/helpers/verify.d.ts.map +1 -1
- package/dist/tools/helpers/verify.js +5 -1
- package/dist/tools/helpers/verify.js.map +1 -1
- package/dist/tools/server-management/_shared.d.ts +15 -4
- package/dist/tools/server-management/_shared.d.ts.map +1 -1
- package/dist/tools/server-management/_shared.js +73 -12
- package/dist/tools/server-management/_shared.js.map +1 -1
- package/dist/tools/server-management/data.d.ts.map +1 -1
- package/dist/tools/server-management/data.js +88 -23
- package/dist/tools/server-management/data.js.map +1 -1
- package/dist/tools/server-management/decisions.d.ts.map +1 -1
- package/dist/tools/server-management/decisions.js +16 -3
- package/dist/tools/server-management/decisions.js.map +1 -1
- package/dist/tools/server-management/policies.d.ts.map +1 -1
- package/dist/tools/server-management/policies.js +44 -7
- package/dist/tools/server-management/policies.js.map +1 -1
- package/dist/tools/server-management/status.d.ts.map +1 -1
- package/dist/tools/server-management/status.js +80 -13
- package/dist/tools/server-management/status.js.map +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -1
|
@@ -7,19 +7,46 @@ import { OpaClient } from '../../lib/opa-client.js';
|
|
|
7
7
|
import { ok } from '../../lib/errors.js';
|
|
8
8
|
import { withToolEnvelope } from '../../lib/tool-helpers.js';
|
|
9
9
|
import { mapOpaClientError } from './_shared.js';
|
|
10
|
+
/**
|
|
11
|
+
* Drop the parts of a policy record the caller did not ask for.
|
|
12
|
+
*
|
|
13
|
+
* OPA answers the policy endpoints with the parsed AST alongside the source,
|
|
14
|
+
* and the AST is far larger than the text it came from: a 477-byte policy comes
|
|
15
|
+
* back as a 19 KB response once the envelope is indented. Returning it by
|
|
16
|
+
* default pushed a list of any real size past the response cap, and the cap's
|
|
17
|
+
* advice to narrow the scope was unfollowable because the list tool takes no
|
|
18
|
+
* arguments.
|
|
19
|
+
*/
|
|
20
|
+
function trimPolicy(record, opts) {
|
|
21
|
+
const trimmed = { id: record.id };
|
|
22
|
+
if (opts.source && record.raw !== undefined)
|
|
23
|
+
trimmed.raw = record.raw;
|
|
24
|
+
if (opts.ast && record.ast !== undefined)
|
|
25
|
+
trimmed.ast = record.ast;
|
|
26
|
+
return trimmed;
|
|
27
|
+
}
|
|
10
28
|
export function registerPolicyTools(server, config) {
|
|
11
29
|
const opa = new OpaClient(config);
|
|
12
30
|
server.registerTool('opa_list_policies', {
|
|
13
31
|
title: 'List OPA policies',
|
|
14
|
-
description: 'List policies registered on the running OPA server. Returns
|
|
15
|
-
inputSchema: {
|
|
32
|
+
description: 'List policies registered on the running OPA server. Returns the policy IDs and a count. Set `includeSource` for the Rego text of every policy, or `includeAst` for the parsed AST of every policy; both are off by default because either one pushes a list of any real size past the response cap.',
|
|
33
|
+
inputSchema: {
|
|
34
|
+
includeSource: z
|
|
35
|
+
.boolean()
|
|
36
|
+
.optional()
|
|
37
|
+
.describe("Include each policy's Rego source. Off by default: fetch one policy with `opa_get_policy` rather than every policy at once."),
|
|
38
|
+
includeAst: z
|
|
39
|
+
.boolean()
|
|
40
|
+
.optional()
|
|
41
|
+
.describe("Include each policy's parsed AST. Off by default; it is roughly forty times the size of the source and will exceed the response cap on all but the smallest servers."),
|
|
42
|
+
},
|
|
16
43
|
annotations: {
|
|
17
44
|
readOnlyHint: true,
|
|
18
45
|
destructiveHint: false,
|
|
19
46
|
idempotentHint: true,
|
|
20
47
|
openWorldHint: true,
|
|
21
48
|
},
|
|
22
|
-
}, async (
|
|
49
|
+
}, async ({ includeSource, includeAst }, { signal }) => {
|
|
23
50
|
return withToolEnvelope(config, async () => {
|
|
24
51
|
try {
|
|
25
52
|
const data = await opa.request({
|
|
@@ -27,7 +54,11 @@ export function registerPolicyTools(server, config) {
|
|
|
27
54
|
path: '/v1/policies',
|
|
28
55
|
signal,
|
|
29
56
|
});
|
|
30
|
-
|
|
57
|
+
const records = data.result ?? [];
|
|
58
|
+
return ok({
|
|
59
|
+
policies: records.map((r) => trimPolicy(r, { source: includeSource === true, ast: includeAst === true })),
|
|
60
|
+
count: records.length,
|
|
61
|
+
});
|
|
31
62
|
}
|
|
32
63
|
catch (e) {
|
|
33
64
|
return mapOpaClientError(e);
|
|
@@ -36,9 +67,13 @@ export function registerPolicyTools(server, config) {
|
|
|
36
67
|
});
|
|
37
68
|
server.registerTool('opa_get_policy', {
|
|
38
69
|
title: 'Get OPA policy by ID',
|
|
39
|
-
description:
|
|
70
|
+
description: "Fetch a single policy by ID from the running OPA server. Returns the Rego source; the parsed AST is omitted unless asked for, since it is roughly forty times the size of the source it came from. Use `rego_parse_ast` on the source when an AST is what's wanted.",
|
|
40
71
|
inputSchema: {
|
|
41
72
|
id: z.string().min(1).describe('Policy ID, e.g. "rbac" or "policies/auth/main".'),
|
|
73
|
+
includeAst: z
|
|
74
|
+
.boolean()
|
|
75
|
+
.optional()
|
|
76
|
+
.describe("Include OPA's parsed AST alongside the source. Off by default."),
|
|
42
77
|
},
|
|
43
78
|
annotations: {
|
|
44
79
|
readOnlyHint: true,
|
|
@@ -46,7 +81,7 @@ export function registerPolicyTools(server, config) {
|
|
|
46
81
|
idempotentHint: true,
|
|
47
82
|
openWorldHint: true,
|
|
48
83
|
},
|
|
49
|
-
}, async ({ id }, { signal }) => {
|
|
84
|
+
}, async ({ id, includeAst }, { signal }) => {
|
|
50
85
|
return withToolEnvelope(config, async () => {
|
|
51
86
|
try {
|
|
52
87
|
const data = await opa.request({
|
|
@@ -54,7 +89,9 @@ export function registerPolicyTools(server, config) {
|
|
|
54
89
|
path: `/v1/policies/${encodeURIComponent(id)}`,
|
|
55
90
|
signal,
|
|
56
91
|
});
|
|
57
|
-
return ok({
|
|
92
|
+
return ok({
|
|
93
|
+
policy: trimPolicy(data.result, { source: true, ast: includeAst === true }),
|
|
94
|
+
});
|
|
58
95
|
}
|
|
59
96
|
catch (e) {
|
|
60
97
|
return mapOpaClientError(e, 'POLICY_NOT_FOUND');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policies.js","sourceRoot":"","sources":["../../../src/tools/server-management/policies.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,MAAM,qBAAqB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAQjD,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,MAAc;IACnE,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAElC,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"policies.js","sourceRoot":"","sources":["../../../src/tools/server-management/policies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/tools/server-management/status.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/tools/server-management/status.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAuE9C,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAkH3E"}
|
|
@@ -2,15 +2,77 @@
|
|
|
2
2
|
* Server-status tools: opa_health, opa_status, opa_config.
|
|
3
3
|
*/
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
-
import { OpaClient,
|
|
6
|
-
import {
|
|
5
|
+
import { OpaClient, OpaHttpError } from '../../lib/opa-client.js';
|
|
6
|
+
import { ok } from '../../lib/errors.js';
|
|
7
7
|
import { withToolEnvelope } from '../../lib/tool-helpers.js';
|
|
8
8
|
import { mapOpaClientError } from './_shared.js';
|
|
9
|
+
/** Stands in for a header value so the header is still visible as configured. */
|
|
10
|
+
const REDACTED = '<redacted by opa-mcp>';
|
|
11
|
+
/** OPA answers an unhealthy check with `{"error": "..."}`; surface that text. */
|
|
12
|
+
function healthReason(e) {
|
|
13
|
+
const body = e.body;
|
|
14
|
+
if (typeof body === 'string' && body.trim().length > 0) {
|
|
15
|
+
try {
|
|
16
|
+
const parsed = JSON.parse(body);
|
|
17
|
+
if (typeof parsed.error === 'string')
|
|
18
|
+
return parsed.error;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return body.trim();
|
|
22
|
+
}
|
|
23
|
+
return body.trim();
|
|
24
|
+
}
|
|
25
|
+
if (typeof body === 'object' && body !== null) {
|
|
26
|
+
const parsed = body;
|
|
27
|
+
if (typeof parsed.error === 'string')
|
|
28
|
+
return parsed.error;
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Redact the values of `services.*.headers` in an OPA configuration document.
|
|
34
|
+
*
|
|
35
|
+
* OPA drops the `credentials` block from `GET /v1/config` but returns `headers`
|
|
36
|
+
* verbatim, and a header is the ordinary way to put an API key or a bearer token
|
|
37
|
+
* in an OPA config. Handing those to an agent, which is what these two tools do
|
|
38
|
+
* with the document, puts a live credential into a transcript. The header names
|
|
39
|
+
* survive, so the document still answers what the server is configured to send.
|
|
40
|
+
*/
|
|
41
|
+
function redactServiceHeaders(document) {
|
|
42
|
+
if (typeof document !== 'object' || document === null || Array.isArray(document)) {
|
|
43
|
+
return document;
|
|
44
|
+
}
|
|
45
|
+
const doc = document;
|
|
46
|
+
const services = doc['services'];
|
|
47
|
+
if (typeof services !== 'object' || services === null || Array.isArray(services)) {
|
|
48
|
+
return document;
|
|
49
|
+
}
|
|
50
|
+
let touched = false;
|
|
51
|
+
const redactedServices = {};
|
|
52
|
+
for (const [name, service] of Object.entries(services)) {
|
|
53
|
+
if (typeof service !== 'object' || service === null || Array.isArray(service)) {
|
|
54
|
+
redactedServices[name] = service;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const entry = service;
|
|
58
|
+
const headers = entry['headers'];
|
|
59
|
+
if (typeof headers !== 'object' || headers === null || Array.isArray(headers)) {
|
|
60
|
+
redactedServices[name] = service;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
touched = true;
|
|
64
|
+
redactedServices[name] = {
|
|
65
|
+
...entry,
|
|
66
|
+
headers: Object.fromEntries(Object.keys(headers).map((k) => [k, REDACTED])),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return touched ? { ...doc, services: redactedServices } : document;
|
|
70
|
+
}
|
|
9
71
|
export function registerStatusTools(server, config) {
|
|
10
72
|
const opa = new OpaClient(config);
|
|
11
73
|
server.registerTool('opa_health', {
|
|
12
74
|
title: 'OPA health check',
|
|
13
|
-
description:
|
|
75
|
+
description: "Hit the OPA `/health` endpoint. A server that answers reports `{ healthy: true }` on 200 and `{ healthy: false }` with OPA's own reason otherwise, so an unactivated bundle is a health result rather than a tool error. `OPA_UNREACHABLE` means the server could not be reached at all. Supports `bundles` and `plugins` query flags to require those subsystems to also be healthy.",
|
|
14
76
|
inputSchema: {
|
|
15
77
|
bundles: z.boolean().optional().describe('Require bundle plugin to be healthy as well.'),
|
|
16
78
|
plugins: z.boolean().optional().describe('Require all plugins to be healthy.'),
|
|
@@ -38,13 +100,16 @@ export function registerStatusTools(server, config) {
|
|
|
38
100
|
return ok({ healthy: true });
|
|
39
101
|
}
|
|
40
102
|
catch (e) {
|
|
41
|
-
|
|
42
|
-
|
|
103
|
+
// A server that answered is reachable. Reporting an unactivated
|
|
104
|
+
// bundle as OPA_UNREACHABLE told the caller to go start a server that
|
|
105
|
+
// was already running, and buried OPA's own reason in a stringified
|
|
106
|
+
// error. Authentication is its own failure, not a health result, and
|
|
107
|
+
// so is a server that could not be reached or a cancelled request.
|
|
108
|
+
if (e instanceof OpaHttpError && e.status !== 401) {
|
|
109
|
+
const reason = healthReason(e);
|
|
110
|
+
return ok({ healthy: false, ...(reason !== undefined ? { reason } : {}) });
|
|
43
111
|
}
|
|
44
|
-
|
|
45
|
-
return err('OPA_UNREACHABLE', 'OPA reported unhealthy.', {
|
|
46
|
-
details: { error: e instanceof Error ? e.message : String(e) },
|
|
47
|
-
});
|
|
112
|
+
return mapOpaClientError(e);
|
|
48
113
|
}
|
|
49
114
|
});
|
|
50
115
|
});
|
|
@@ -54,7 +119,9 @@ export function registerStatusTools(server, config) {
|
|
|
54
119
|
'Returns the same underlying document as `opa_config` but presented under a `status` ' +
|
|
55
120
|
'key as a convenience for agents that want to check "what is running" rather than ' +
|
|
56
121
|
'"what was the server configured with". The response includes bundle settings, ' +
|
|
57
|
-
'decision-log settings, and plugin configuration as OPA reported them at startup.'
|
|
122
|
+
'decision-log settings, and plugin configuration as OPA reported them at startup. ' +
|
|
123
|
+
'Service header values are redacted, since OPA returns them verbatim and a header is ' +
|
|
124
|
+
'the ordinary place to put an API key.',
|
|
58
125
|
inputSchema: {},
|
|
59
126
|
annotations: {
|
|
60
127
|
readOnlyHint: true,
|
|
@@ -70,7 +137,7 @@ export function registerStatusTools(server, config) {
|
|
|
70
137
|
path: '/v1/config',
|
|
71
138
|
signal,
|
|
72
139
|
});
|
|
73
|
-
return ok({ status: data.result ?? data });
|
|
140
|
+
return ok({ status: redactServiceHeaders(data.result ?? data) });
|
|
74
141
|
}
|
|
75
142
|
catch (e) {
|
|
76
143
|
return mapOpaClientError(e);
|
|
@@ -79,7 +146,7 @@ export function registerStatusTools(server, config) {
|
|
|
79
146
|
});
|
|
80
147
|
server.registerTool('opa_config', {
|
|
81
148
|
title: 'OPA configuration',
|
|
82
|
-
description: 'Return the running OPA server configuration
|
|
149
|
+
description: 'Return the running OPA server configuration from `GET /v1/config`. OPA drops the `credentials` block but returns `services.*.headers` verbatim, which is the ordinary place to put an API key or a bearer token, so those values are redacted here and the header names kept.',
|
|
83
150
|
inputSchema: {},
|
|
84
151
|
annotations: {
|
|
85
152
|
readOnlyHint: true,
|
|
@@ -95,7 +162,7 @@ export function registerStatusTools(server, config) {
|
|
|
95
162
|
path: '/v1/config',
|
|
96
163
|
signal,
|
|
97
164
|
});
|
|
98
|
-
return ok({ config: data.result ?? data });
|
|
165
|
+
return ok({ config: redactServiceHeaders(data.result ?? data) });
|
|
99
166
|
}
|
|
100
167
|
catch (e) {
|
|
101
168
|
return mapOpaClientError(e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/tools/server-management/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/tools/server-management/status.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
* Shared types used across tools, prompts, and resources.
|
|
3
3
|
*/
|
|
4
4
|
/** Standard error codes returned by tools. */
|
|
5
|
+
/**
|
|
6
|
+
* Codes a tool can return.
|
|
7
|
+
*
|
|
8
|
+
* Four names are reserved and currently unused: REGAL_VERSION_TOO_OLD (no
|
|
9
|
+
* minimum-version check exists), DEPENDENCY_CONFLICT, VERIFY_INCONCLUSIVE
|
|
10
|
+
* (rego_verify reports an inconclusive result as a verdict, not an error) and
|
|
11
|
+
* Z3_INIT_ERROR. They are kept so the union stays stable for consumers, and
|
|
12
|
+
* are no longer listed in the README as codes a caller can expect.
|
|
13
|
+
*/
|
|
5
14
|
export type ToolErrorCode = 'INVALID_INPUT' | 'OPA_BINARY_NOT_FOUND' | 'REGAL_NOT_FOUND' | 'REGAL_VERSION_TOO_OLD' | 'CONFTEST_NOT_FOUND' | 'INVALID_REGO' | 'INVALID_BUNDLE' | 'EVAL_ERROR' | 'PATH_NOT_ALLOWED' | 'PATH_NOT_FOUND' | 'OPA_UNREACHABLE' | 'OPA_AUTH_FAILED' | 'POLICY_NOT_FOUND' | 'DATA_NOT_FOUND' | 'DEPENDENCY_CONFLICT' | 'NO_TESTS_FOUND' | 'COVERAGE_BELOW_THRESHOLD' | 'OUTPUT_TOO_LARGE' | 'TIMEOUT' | 'CANCELLED' | 'VERIFY_INCONCLUSIVE' | 'Z3_INIT_ERROR' | 'OPA_VERSION_UNSUPPORTED' | 'GITHUB_TOKEN_MISSING' | 'GIST_CREATE_FAILED' | 'UNKNOWN_ERROR';
|
|
6
15
|
/** Structured error payload. */
|
|
7
16
|
export interface ToolError {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8CAA8C;AAC9C,MAAM,MAAM,aAAa,GACrB,eAAe,GACf,sBAAsB,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,oBAAoB,GACpB,cAAc,GACd,gBAAgB,GAChB,YAAY,GACZ,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,qBAAqB,GACrB,gBAAgB,GAChB,0BAA0B,GAC1B,kBAAkB,GAClB,SAAS,GACT,WAAW,GACX,qBAAqB,GACrB,eAAe,GACf,yBAAyB,GACzB,sBAAsB,GACtB,oBAAoB,GACpB,eAAe,CAAC;AAEpB,gCAAgC;AAChC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8CAA8C;AAC9C;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GACrB,eAAe,GACf,sBAAsB,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,oBAAoB,GACpB,cAAc,GACd,gBAAgB,GAChB,YAAY,GACZ,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,qBAAqB,GACrB,gBAAgB,GAChB,0BAA0B,GAC1B,kBAAkB,GAClB,SAAS,GACT,WAAW,GACX,qBAAqB,GACrB,eAAe,GACf,yBAAyB,GACzB,sBAAsB,GACtB,oBAAoB,GACpB,eAAe,CAAC;AAEpB,gCAAgC;AAChC,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orygn/opa-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"mcpName": "io.github.OrygnsCode/opa-mcp",
|
|
5
5
|
"description": "Model Context Protocol server for Open Policy Agent (OPA). Author, validate, debug, and explain Rego policies through any MCP-compatible client.",
|
|
6
6
|
"type": "module",
|
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
"test:watch": "vitest",
|
|
60
60
|
"test:coverage": "vitest run --config vitest.coverage.config.ts --coverage",
|
|
61
61
|
"test:integration": "vitest run --config vitest.integration.config.ts",
|
|
62
|
+
"verify:fuzz": "node scripts/verify-soundness-fuzz.mjs",
|
|
62
63
|
"prepublishOnly": "npm run lint && npm run typecheck && npm run test && npm run build",
|
|
63
64
|
"clean": "rimraf dist coverage .vitest-cache",
|
|
64
65
|
"bundle:fetch": "node scripts/fetch-opa-binaries.mjs",
|