@belvador/mcp 0.7.2 → 0.8.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/dist/cli.js +102 -97
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -214,7 +214,7 @@ function docsFetcher(siteUrl, fetcher = fetch, now = () => Date.now()) {
|
|
|
214
214
|
import { CLIENT_CAPABILITIES_META_KEY, inputRequired, McpServer } from "@modelcontextprotocol/server";
|
|
215
215
|
|
|
216
216
|
// ../src/shared/contracts/mcp-tools.ts
|
|
217
|
-
import { z as
|
|
217
|
+
import { z as z34 } from "zod";
|
|
218
218
|
|
|
219
219
|
// ../src/shared/contracts/api-ops/access.ts
|
|
220
220
|
import { z as z3 } from "zod";
|
|
@@ -2056,6 +2056,7 @@ var INCIDENT_OPERATIONS = [
|
|
|
2056
2056
|
input: I.workspace,
|
|
2057
2057
|
workspace: true,
|
|
2058
2058
|
idempotency: "none",
|
|
2059
|
+
paged: true,
|
|
2059
2060
|
mcp: "investigate",
|
|
2060
2061
|
summary: "Rules that turn alerts into incidents: match, grouping, window and recovery wait.",
|
|
2061
2062
|
ui: []
|
|
@@ -2101,6 +2102,7 @@ var INCIDENT_OPERATIONS = [
|
|
|
2101
2102
|
input: I.workspace,
|
|
2102
2103
|
workspace: true,
|
|
2103
2104
|
idempotency: "none",
|
|
2105
|
+
paged: true,
|
|
2104
2106
|
mcp: "investigate",
|
|
2105
2107
|
summary: "Notification policies: quiet hours, digest, fallback chain and escalation.",
|
|
2106
2108
|
ui: []
|
|
@@ -4014,7 +4016,7 @@ var NODE_OPERATIONS = [
|
|
|
4014
4016
|
path: "/v1/spans",
|
|
4015
4017
|
scope: "traces:read",
|
|
4016
4018
|
input: N.spansList,
|
|
4017
|
-
node: { path: "q/spans", list: "spans", window: true },
|
|
4019
|
+
node: { path: "q/spans", list: "spans", modeLists: ["traces"], window: true },
|
|
4018
4020
|
paged: true,
|
|
4019
4021
|
summary: "Spans (or whole traces with `mode=traces`) in a window of at most 7 days."
|
|
4020
4022
|
}),
|
|
@@ -5185,6 +5187,9 @@ function approvalRequestSchema(operationId, input) {
|
|
|
5185
5187
|
return input.omit(Object.fromEntries(human.map((k) => [k, true])));
|
|
5186
5188
|
}
|
|
5187
5189
|
|
|
5190
|
+
// ../src/shared/contracts/api-ops/openapi.ts
|
|
5191
|
+
import { z as z33 } from "zod";
|
|
5192
|
+
|
|
5188
5193
|
// ../src/shared/contracts/api-ops/wire.ts
|
|
5189
5194
|
import { z as z32 } from "zod";
|
|
5190
5195
|
var toSnake = (s) => s.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`);
|
|
@@ -5407,7 +5412,7 @@ function wireInput(operationId, opts = {}) {
|
|
|
5407
5412
|
for (const [k, v] of Object.entries(op.input.shape))
|
|
5408
5413
|
if (!omit.has(k))
|
|
5409
5414
|
shape[toSnake(k)] = v;
|
|
5410
|
-
return
|
|
5415
|
+
return z34.object(shape);
|
|
5411
5416
|
}
|
|
5412
5417
|
var BUDGETS = [
|
|
5413
5418
|
{ stringBytes: MCP_LIMITS.untrustedStringMaxBytes, listMax: MCP_LIMITS.listMax },
|
|
@@ -5500,52 +5505,52 @@ function errorResult(o) {
|
|
|
5500
5505
|
}
|
|
5501
5506
|
};
|
|
5502
5507
|
}
|
|
5503
|
-
var TOOL_OUTPUT_SCHEMA =
|
|
5504
|
-
untrusted:
|
|
5505
|
-
data:
|
|
5506
|
-
provenance:
|
|
5507
|
-
source:
|
|
5508
|
-
operations:
|
|
5508
|
+
var TOOL_OUTPUT_SCHEMA = z34.object({
|
|
5509
|
+
untrusted: z34.object({
|
|
5510
|
+
data: z34.unknown(),
|
|
5511
|
+
provenance: z34.object({
|
|
5512
|
+
source: z34.enum(["node", "control_plane", "docs"]),
|
|
5513
|
+
operations: z34.array(z34.string())
|
|
5509
5514
|
})
|
|
5510
5515
|
}).optional(),
|
|
5511
|
-
doc:
|
|
5512
|
-
slug:
|
|
5513
|
-
locale:
|
|
5514
|
-
url:
|
|
5515
|
-
markdown:
|
|
5516
|
-
truncated:
|
|
5516
|
+
doc: z34.object({
|
|
5517
|
+
slug: z34.string(),
|
|
5518
|
+
locale: z34.enum(["en", "vi"]),
|
|
5519
|
+
url: z34.string(),
|
|
5520
|
+
markdown: z34.string(),
|
|
5521
|
+
truncated: z34.boolean()
|
|
5517
5522
|
}).optional(),
|
|
5518
|
-
results:
|
|
5519
|
-
slug:
|
|
5520
|
-
title:
|
|
5521
|
-
description:
|
|
5522
|
-
section:
|
|
5523
|
-
url:
|
|
5523
|
+
results: z34.array(z34.object({
|
|
5524
|
+
slug: z34.string(),
|
|
5525
|
+
title: z34.string(),
|
|
5526
|
+
description: z34.string(),
|
|
5527
|
+
section: z34.string(),
|
|
5528
|
+
url: z34.string()
|
|
5524
5529
|
})).optional(),
|
|
5525
|
-
next_cursor:
|
|
5526
|
-
complete:
|
|
5527
|
-
omitted:
|
|
5528
|
-
truncated:
|
|
5529
|
-
suspicious_unicode:
|
|
5530
|
-
error:
|
|
5531
|
-
code:
|
|
5532
|
-
status:
|
|
5533
|
-
detail:
|
|
5534
|
-
scope:
|
|
5535
|
-
retry_after:
|
|
5530
|
+
next_cursor: z34.string().nullable().optional(),
|
|
5531
|
+
complete: z34.boolean().optional(),
|
|
5532
|
+
omitted: z34.array(z34.object({ part: z34.string(), reason: z34.string(), scope: z34.string().optional() })).optional(),
|
|
5533
|
+
truncated: z34.literal(true).optional(),
|
|
5534
|
+
suspicious_unicode: z34.literal(true).optional(),
|
|
5535
|
+
error: z34.object({
|
|
5536
|
+
code: z34.string(),
|
|
5537
|
+
status: z34.number(),
|
|
5538
|
+
detail: z34.string().optional(),
|
|
5539
|
+
scope: z34.string().optional(),
|
|
5540
|
+
retry_after: z34.number().optional()
|
|
5536
5541
|
}).optional(),
|
|
5537
|
-
operations:
|
|
5538
|
-
operation:
|
|
5539
|
-
plan:
|
|
5540
|
-
status:
|
|
5541
|
-
approval:
|
|
5542
|
-
approval_id:
|
|
5543
|
-
approval_url:
|
|
5544
|
-
expires_at:
|
|
5545
|
-
state:
|
|
5546
|
-
result_code:
|
|
5547
|
-
result:
|
|
5548
|
-
next:
|
|
5542
|
+
operations: z34.array(z34.record(z34.string(), z34.unknown())).optional(),
|
|
5543
|
+
operation: z34.record(z34.string(), z34.unknown()).optional(),
|
|
5544
|
+
plan: z34.record(z34.string(), z34.unknown()).optional(),
|
|
5545
|
+
status: z34.enum(["done", "approval_required", "approval_pending", ...APPROVAL_STATES]).optional(),
|
|
5546
|
+
approval: z34.object({
|
|
5547
|
+
approval_id: z34.string(),
|
|
5548
|
+
approval_url: z34.string(),
|
|
5549
|
+
expires_at: z34.string(),
|
|
5550
|
+
state: z34.enum(APPROVAL_STATES),
|
|
5551
|
+
result_code: z34.string().nullable().optional(),
|
|
5552
|
+
result: z34.record(z34.string(), z34.unknown()).optional(),
|
|
5553
|
+
next: z34.string().optional()
|
|
5549
5554
|
}).optional()
|
|
5550
5555
|
});
|
|
5551
5556
|
var spec = (name) => {
|
|
@@ -5591,10 +5596,10 @@ var has = (rt, operationId) => {
|
|
|
5591
5596
|
return !!op && rt.scopes.includes(op.scope);
|
|
5592
5597
|
};
|
|
5593
5598
|
var isoWindow = {
|
|
5594
|
-
start:
|
|
5595
|
-
end:
|
|
5599
|
+
start: z34.string().max(40).describe("RFC 3339 start of the window, e.g. 2026-10-26T00:00:00Z. Required with end."),
|
|
5600
|
+
end: z34.string().max(40).describe("RFC 3339 end of the window. The plan limits its length.")
|
|
5596
5601
|
};
|
|
5597
|
-
var traceIdSchema =
|
|
5602
|
+
var traceIdSchema = z34.string().regex(/^[0-9a-fA-F]{32}$/);
|
|
5598
5603
|
var MONITOR_KINDS2 = {
|
|
5599
5604
|
cron: { list: "monitors.list", get: "monitors.get", idField: "monitor_id" },
|
|
5600
5605
|
uptime: { list: "uptime.list", get: "uptime.get", idField: "check_id" },
|
|
@@ -5658,8 +5663,8 @@ function describe(op, scopes) {
|
|
|
5658
5663
|
destructive: isDestructiveOperation(op)
|
|
5659
5664
|
};
|
|
5660
5665
|
}
|
|
5661
|
-
var params =
|
|
5662
|
-
var operationIdArg =
|
|
5666
|
+
var params = z34.record(z34.string(), z34.unknown()).default({}).describe("Operation fields in wire names (snake_case), as describe_operation's args_schema shows.");
|
|
5667
|
+
var operationIdArg = z34.string().min(3).max(80).describe("An operation id from search_operations, e.g. `monitors.update`.");
|
|
5663
5668
|
function approvalBlock(t, next) {
|
|
5664
5669
|
return {
|
|
5665
5670
|
approval_id: t.approval_id,
|
|
@@ -5679,7 +5684,7 @@ var MCP_TOOL_DEFS = [
|
|
|
5679
5684
|
title: "Workspace and node",
|
|
5680
5685
|
description: "The workspace this token belongs to (name, plan, limits) and the state of its node, the server that stores errors, traces and logs. Start here to learn what the token can reach.",
|
|
5681
5686
|
operations: ["workspace.get", "node.get"],
|
|
5682
|
-
input:
|
|
5687
|
+
input: z34.object({}),
|
|
5683
5688
|
async run(_args, rt) {
|
|
5684
5689
|
const [ws, node] = await Promise.all([rt.call("workspace.get", {}), rt.call("node.get", {})]);
|
|
5685
5690
|
if (!ws.ok)
|
|
@@ -5701,9 +5706,9 @@ var MCP_TOOL_DEFS = [
|
|
|
5701
5706
|
title: "Get an issue",
|
|
5702
5707
|
description: "One issue with its 24 h and 30 d counts and, when the token can read events, its latest event (stack trace, request, breadcrumbs — scrubbed on the node). A resolved issue also carries `fix_status` when the token can read releases: fixed, unverified, not_fixed (with the event that broke it) or unknown, per environment.",
|
|
5703
5708
|
operations: ["issues.get", "events.get", "issues.fix_status"],
|
|
5704
|
-
input:
|
|
5705
|
-
issue_id:
|
|
5706
|
-
include_latest_event:
|
|
5709
|
+
input: z34.object({
|
|
5710
|
+
issue_id: z34.number().int().positive().describe("Issue id from search_issues."),
|
|
5711
|
+
include_latest_event: z34.boolean().default(true)
|
|
5707
5712
|
}),
|
|
5708
5713
|
async run(args, rt) {
|
|
5709
5714
|
const omitted = [];
|
|
@@ -5744,9 +5749,9 @@ var MCP_TOOL_DEFS = [
|
|
|
5744
5749
|
title: "Get a trace",
|
|
5745
5750
|
description: "Summary of one distributed trace (services, duration, errors) by its 32-hex trace id, and optionally its spans (errors only, or the first page).",
|
|
5746
5751
|
operations: ["traces.get", "traces.spans"],
|
|
5747
|
-
input:
|
|
5752
|
+
input: z34.object({
|
|
5748
5753
|
trace_id: traceIdSchema.describe("W3C trace id, 32 hex characters."),
|
|
5749
|
-
spans:
|
|
5754
|
+
spans: z34.enum(["none", "errors", "all"]).default("none")
|
|
5750
5755
|
}),
|
|
5751
5756
|
async run(args, rt) {
|
|
5752
5757
|
const sum = await rt.call("traces.get", { trace_id: args["trace_id"] });
|
|
@@ -5778,17 +5783,17 @@ var MCP_TOOL_DEFS = [
|
|
|
5778
5783
|
title: "Query metrics",
|
|
5779
5784
|
description: "OpenTelemetry metrics of one project. Without `name`: the metric catalog (name, type, unit, series count, last seen; `q` narrows by name) and the node's series caps. With `name` plus start and end: the metric aggregated per step — `aggregation` defaults to rate for counters, p95 for histograms and avg for gauges — optionally filtered by attributes (`attrs`, JSON list of {k, op, v}) and grouped by up to two attribute keys (`group_by`, comma-separated). Exemplar trace ids open with get_trace.",
|
|
5780
5785
|
operations: ["metrics.names", "metrics.query"],
|
|
5781
|
-
input:
|
|
5782
|
-
project:
|
|
5783
|
-
name:
|
|
5784
|
-
q:
|
|
5785
|
-
aggregation:
|
|
5786
|
+
input: z34.object({
|
|
5787
|
+
project: z34.number().int().positive().describe("Numeric project id from list_projects."),
|
|
5788
|
+
name: z34.string().regex(METRIC_NAME_RE).optional().describe("Metric name from the catalog, e.g. http.server.request.duration."),
|
|
5789
|
+
q: z34.string().max(255).optional().describe("Catalog only: part of a metric name."),
|
|
5790
|
+
aggregation: z34.enum(METRIC_AGGREGATIONS).optional(),
|
|
5786
5791
|
start: isoWindow.start.optional(),
|
|
5787
5792
|
end: isoWindow.end.optional(),
|
|
5788
|
-
step:
|
|
5789
|
-
attrs:
|
|
5790
|
-
group_by:
|
|
5791
|
-
environment:
|
|
5793
|
+
step: z34.number().int().min(60).max(86400).multipleOf(60).optional().describe("Seconds per point (whole minutes); picked from the window when absent."),
|
|
5794
|
+
attrs: z34.string().max(2000).optional(),
|
|
5795
|
+
group_by: z34.string().max(600).optional(),
|
|
5796
|
+
environment: z34.string().max(2000).optional().describe("Comma-separated environments.")
|
|
5792
5797
|
}),
|
|
5793
5798
|
async run(args, rt) {
|
|
5794
5799
|
const scope = {
|
|
@@ -5843,8 +5848,8 @@ var MCP_TOOL_DEFS = [
|
|
|
5843
5848
|
title: "Release health",
|
|
5844
5849
|
description: "What changed with a release (spec 13). With `version`: that release in one environment against the previous one (or `compare`) — three lists for its first 24 hours: new issues, regressed issues and increased issues (≥ 2× events per hour and ≥ 10 events), up to 50 each with hourly sparklines, plus its deploy markers. Without `version`: the project's releases, newest deploy first, with those three counts. `environment` defaults to production (else the busiest). Whether a resolved issue is really fixed: get_issue returns its fix status.",
|
|
5845
5850
|
operations: ["releases.list", "releases.health"],
|
|
5846
|
-
input:
|
|
5847
|
-
project:
|
|
5851
|
+
input: z34.object({
|
|
5852
|
+
project: z34.number().int().positive().describe("Numeric project id from list_projects."),
|
|
5848
5853
|
version: releaseNameSchema.optional().describe("Release name exactly as the SDK sends it, e.g. web@1.4.2."),
|
|
5849
5854
|
environment: environmentNameSchema.optional().describe("One environment, e.g. production."),
|
|
5850
5855
|
compare: releaseNameSchema.optional().describe("With version: compare against this release instead of the previous one.")
|
|
@@ -5876,11 +5881,11 @@ var MCP_TOOL_DEFS = [
|
|
|
5876
5881
|
title: "Correlate by trace or run",
|
|
5877
5882
|
description: "Everything that shares one W3C trace id or one Belvador run id (`belvador.run.id`, set by job monitors) in a time window: the trace summary, its error spans and the logs. Give exactly one of trace_id or run_id.",
|
|
5878
5883
|
operations: ["traces.get", "traces.spans", "spans.list", "logs.list"],
|
|
5879
|
-
input:
|
|
5884
|
+
input: z34.object({
|
|
5880
5885
|
trace_id: traceIdSchema.optional(),
|
|
5881
|
-
run_id:
|
|
5886
|
+
run_id: z34.string().min(1).max(128).optional(),
|
|
5882
5887
|
...isoWindow,
|
|
5883
|
-
project:
|
|
5888
|
+
project: z34.string().max(2000).optional().describe("Comma-separated project ids.")
|
|
5884
5889
|
}),
|
|
5885
5890
|
async run(args, rt) {
|
|
5886
5891
|
const trace = args["trace_id"];
|
|
@@ -5939,10 +5944,10 @@ var MCP_TOOL_DEFS = [
|
|
|
5939
5944
|
title: "List monitors",
|
|
5940
5945
|
description: "Monitors (cron, heartbeat, count, assertion, deadline, progress), uptime checks and SLOs with their current status. `kind` narrows to one family; `project_id` to one project (cron and uptime).",
|
|
5941
5946
|
operations: ["monitors.list", "uptime.list", "slos.list"],
|
|
5942
|
-
input:
|
|
5943
|
-
kind:
|
|
5944
|
-
project_id:
|
|
5945
|
-
limit:
|
|
5947
|
+
input: z34.object({
|
|
5948
|
+
kind: z34.enum(["all", "cron", "uptime", "slo"]).default("all"),
|
|
5949
|
+
project_id: z34.number().int().positive().optional(),
|
|
5950
|
+
limit: z34.number().int().min(1).max(200).default(50)
|
|
5946
5951
|
}),
|
|
5947
5952
|
async run(args, rt) {
|
|
5948
5953
|
const kinds = args["kind"] && args["kind"] !== "all" ? [args["kind"]] : ["cron", "uptime", "slo"];
|
|
@@ -5977,10 +5982,10 @@ var MCP_TOOL_DEFS = [
|
|
|
5977
5982
|
"monitors.occurrences",
|
|
5978
5983
|
"monitors.backtest"
|
|
5979
5984
|
],
|
|
5980
|
-
input:
|
|
5981
|
-
kind:
|
|
5982
|
-
id:
|
|
5983
|
-
backtest:
|
|
5985
|
+
input: z34.object({
|
|
5986
|
+
kind: z34.enum(["cron", "uptime", "slo"]),
|
|
5987
|
+
id: z34.guid(),
|
|
5988
|
+
backtest: z34.boolean().default(false)
|
|
5984
5989
|
}),
|
|
5985
5990
|
async run(args, rt) {
|
|
5986
5991
|
const k = MONITOR_KINDS2[args["kind"]];
|
|
@@ -6040,9 +6045,9 @@ var MCP_TOOL_DEFS = [
|
|
|
6040
6045
|
title: "Send a test event",
|
|
6041
6046
|
description: "Asks the node to send one tagged test error through the public intake of a project, proving the path real errors take. Not read-only: it creates one test event (reuse idempotency_key to retry without a second one).",
|
|
6042
6047
|
operations: ["projects.send_test_event"],
|
|
6043
|
-
input:
|
|
6044
|
-
project_id:
|
|
6045
|
-
idempotency_key:
|
|
6048
|
+
input: z34.object({
|
|
6049
|
+
project_id: z34.number().int().positive(),
|
|
6050
|
+
idempotency_key: z34.string().min(8).max(255).optional()
|
|
6046
6051
|
}),
|
|
6047
6052
|
async run(args, rt) {
|
|
6048
6053
|
const r = await rt.call("projects.send_test_event", { project_id: args["project_id"] }, { idempotencyKey: args["idempotency_key"] ?? rt.newKey() });
|
|
@@ -6060,9 +6065,9 @@ var MCP_TOOL_DEFS = [
|
|
|
6060
6065
|
title: "Find a configuration change",
|
|
6061
6066
|
description: "Searches what this token can change in its Belvador workspace: projects, keys and tokens, monitors of every type, maintenance windows, occurrences, uptime checks, SLOs, alert rules and destinations, members, service accounts and the node. Returns operation ids for describe_operation and plan_change, whether a person must approve the change, and whether this token holds the scope.",
|
|
6062
6067
|
operations: [],
|
|
6063
|
-
input:
|
|
6064
|
-
query:
|
|
6065
|
-
limit:
|
|
6068
|
+
input: z34.object({
|
|
6069
|
+
query: z34.string().min(1).max(200).describe("Words such as `rotate dsn key`, `heartbeat monitor`, `slack alert`."),
|
|
6070
|
+
limit: z34.number().int().min(1).max(20).default(10)
|
|
6066
6071
|
}),
|
|
6067
6072
|
async run(args, rt) {
|
|
6068
6073
|
const q = words(String(args["query"]));
|
|
@@ -6090,7 +6095,7 @@ var MCP_TOOL_DEFS = [
|
|
|
6090
6095
|
title: "Describe a configuration change",
|
|
6091
6096
|
description: "Everything needed to call one operation: its fields (JSON Schema, wire names), the scope, whether it needs If-Match (call plan_change for the current ETag), an idempotency key, or a person's approval, and which fields the approving person types on belvador.dev instead of the agent.",
|
|
6092
6097
|
operations: [],
|
|
6093
|
-
input:
|
|
6098
|
+
input: z34.object({ operation_id: operationIdArg }),
|
|
6094
6099
|
async run(args, rt) {
|
|
6095
6100
|
const op = configureOp(args["operation_id"]);
|
|
6096
6101
|
if (!op || op.method === "GET")
|
|
@@ -6119,7 +6124,7 @@ var MCP_TOOL_DEFS = [
|
|
|
6119
6124
|
title: "Check a change before applying it",
|
|
6120
6125
|
description: "Validates params for one operation without changing anything: field errors, missing scope, whether a person must approve, and — when the resource can be read — its current state, the fields that would change and the ETag to pass as if_match.",
|
|
6121
6126
|
operations: [],
|
|
6122
|
-
input:
|
|
6127
|
+
input: z34.object({ operation_id: operationIdArg, params }),
|
|
6123
6128
|
async run(args, rt) {
|
|
6124
6129
|
const op = configureOp(args["operation_id"]);
|
|
6125
6130
|
if (!op || op.method === "GET")
|
|
@@ -6168,11 +6173,11 @@ var MCP_TOOL_DEFS = [
|
|
|
6168
6173
|
title: "Apply a configuration change",
|
|
6169
6174
|
description: "Runs one operation with params (validate first with plan_change). Always send idempotency_key: repeating a call with the same key never applies it twice. Sensitive operations answer approval_required with an approval_url a person opens on belvador.dev; nothing changes until they approve with their authenticator code.",
|
|
6170
6175
|
operations: [],
|
|
6171
|
-
input:
|
|
6176
|
+
input: z34.object({
|
|
6172
6177
|
operation_id: operationIdArg,
|
|
6173
6178
|
params,
|
|
6174
|
-
idempotency_key:
|
|
6175
|
-
if_match:
|
|
6179
|
+
idempotency_key: z34.string().min(8).max(255).describe("Unique per change; reuse it to retry or to fetch the result."),
|
|
6180
|
+
if_match: z34.string().max(200).optional().describe("ETag from plan_change, for operations that need it.")
|
|
6176
6181
|
}),
|
|
6177
6182
|
async run(args, rt) {
|
|
6178
6183
|
const op = configureOp(args["operation_id"]);
|
|
@@ -6233,7 +6238,7 @@ var MCP_TOOL_DEFS = [
|
|
|
6233
6238
|
title: "Follow an approval",
|
|
6234
6239
|
description: "State of a change waiting for a person's approval: pending, approved, executed (with the ids it produced), rejected, expired or failed (with the error code).",
|
|
6235
6240
|
operations: ["approvals.get"],
|
|
6236
|
-
input:
|
|
6241
|
+
input: z34.object({ approval_id: z34.guid().describe("approval_id from apply_change.") }),
|
|
6237
6242
|
async run(args, rt) {
|
|
6238
6243
|
const r = await rt.call("approvals.get", { approval_id: args["approval_id"] });
|
|
6239
6244
|
if (!r.ok)
|
|
@@ -6253,10 +6258,10 @@ var MCP_TOOL_DEFS = [
|
|
|
6253
6258
|
title: "Search Belvador docs",
|
|
6254
6259
|
description: "Searches the public Belvador documentation (titles and summaries) and returns the best pages with their slugs for get_doc.",
|
|
6255
6260
|
operations: [],
|
|
6256
|
-
input:
|
|
6257
|
-
query:
|
|
6258
|
-
locale:
|
|
6259
|
-
limit:
|
|
6261
|
+
input: z34.object({
|
|
6262
|
+
query: z34.string().min(1).max(200),
|
|
6263
|
+
locale: z34.enum(["en", "vi"]).default("en"),
|
|
6264
|
+
limit: z34.number().int().min(1).max(10).default(5)
|
|
6260
6265
|
}),
|
|
6261
6266
|
async run(args, rt) {
|
|
6262
6267
|
const locale = args["locale"] ?? "en";
|
|
@@ -6272,9 +6277,9 @@ var MCP_TOOL_DEFS = [
|
|
|
6272
6277
|
title: "Read a docs page",
|
|
6273
6278
|
description: "The Markdown of one public Belvador docs page by slug (e.g. `quickstart`, `sdk/react`, `reference/api`).",
|
|
6274
6279
|
operations: [],
|
|
6275
|
-
input:
|
|
6276
|
-
slug:
|
|
6277
|
-
locale:
|
|
6280
|
+
input: z34.object({
|
|
6281
|
+
slug: z34.string().regex(/^[a-z0-9][a-z0-9/-]{0,120}$/),
|
|
6282
|
+
locale: z34.enum(["en", "vi"]).default("en")
|
|
6278
6283
|
}),
|
|
6279
6284
|
async run(args, rt) {
|
|
6280
6285
|
const locale = args["locale"] ?? "en";
|
|
@@ -6468,7 +6473,7 @@ function findToken(env = process.env, keychain = keychainToken) {
|
|
|
6468
6473
|
}
|
|
6469
6474
|
|
|
6470
6475
|
// packages/mcp/src/cli.ts
|
|
6471
|
-
var PACKAGE_VERSION = "0.
|
|
6476
|
+
var PACKAGE_VERSION = "0.8.0";
|
|
6472
6477
|
var HELP = `belvador-mcp ${PACKAGE_VERSION} — Belvador MCP server (stdio)
|
|
6473
6478
|
|
|
6474
6479
|
Usage: npx -y @belvador/mcp [--toolsets=${MCP_DEFAULT_TOOLSETS.join(",")}]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@belvador/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Belvador MCP server over stdio: the same read-only tools as api.belvador.dev/mcp (issues, events, traces, logs, monitors, docs), with node data read straight from the edge.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Belvador (https://belvador.dev)",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"node": ">=20.10"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@belvador/api": "0.
|
|
33
|
+
"@belvador/api": "0.8.0",
|
|
34
34
|
"@modelcontextprotocol/server": "2.4.0",
|
|
35
35
|
"zod": "4.6.7"
|
|
36
36
|
},
|