@argosvix/mcp-server 0.2.0-alpha.1 → 0.3.1-alpha.1
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/README.md +59 -3
- package/dist/http.d.ts +36 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +411 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +19 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +65 -45
- package/dist/index.js.map +1 -1
- package/dist/prompts.d.ts +27 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +169 -0
- package/dist/prompts.js.map +1 -0
- package/dist/resources.d.ts +34 -0
- package/dist/resources.d.ts.map +1 -0
- package/dist/resources.js +123 -0
- package/dist/resources.js.map +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +82 -6
- package/dist/tools.js.map +1 -1
- package/dist/tools.test.js +74 -15
- package/dist/tools.test.js.map +1 -1
- package/package.json +50 -50
package/dist/index.js
CHANGED
|
@@ -5,65 +5,85 @@
|
|
|
5
5
|
* AI agent (= Claude Desktop / Cursor / Codex CLI 等) から Argosvix の
|
|
6
6
|
* traces / cost / alert を 直接 query するための Model Context Protocol server。
|
|
7
7
|
*
|
|
8
|
-
* Phase 1 (= 2026-05
|
|
9
|
-
* - stdio transport のみ (= MCP standard、 Claude Desktop / Cursor 標準)
|
|
10
|
-
* - read-only tools (= query_calls / get_cost_summary / list_alerts)
|
|
11
|
-
* - auth = ARGOSVIX_API_KEY env var 経由
|
|
12
|
-
*
|
|
8
|
+
* Phase 1 (= 2026-05): stdio transport + read-only tools 3 件
|
|
13
9
|
* Phase 2 (= 完了): 書き込み tools (= silence_alert / unsilence_alert)
|
|
14
|
-
* Phase 3 (= 完了):
|
|
10
|
+
* Phase 3 (= 完了): create_alert + read tools 2 件 (get_alert / list_alert_events)
|
|
11
|
+
* + HTTP transport (= 本ファイル + http.ts、 2026-05-31)
|
|
15
12
|
*
|
|
16
|
-
*
|
|
17
|
-
* -
|
|
18
|
-
*
|
|
19
|
-
*
|
|
13
|
+
* 起動モード:
|
|
14
|
+
* - stdio (= default): argosvix-mcp
|
|
15
|
+
* Claude Desktop / Cursor / Codex CLI が subprocess として spawn する想定。
|
|
16
|
+
* ARGOSVIX_API_KEY env var が必須。
|
|
17
|
+
* - HTTP transport: argosvix-mcp --http
|
|
18
|
+
* remote MCP server として port (default 3000) で listen。 認証は各 request の
|
|
19
|
+
* Authorization: Bearer header から。 multi-tenant 用途、 self-host 用。
|
|
20
|
+
* env: MCP_HTTP_PORT / MCP_HTTP_HOST / MCP_HTTP_ALLOWED_HOSTS。
|
|
20
21
|
*
|
|
21
|
-
*
|
|
22
|
+
* stdio install + use (= Claude Desktop の場合):
|
|
22
23
|
* 1. npm install -g @argosvix/mcp-server
|
|
23
|
-
* 2. Claude Desktop
|
|
24
|
+
* 2. Claude Desktop config (= `~/Library/Application Support/Claude/claude_desktop_config.json`)
|
|
24
25
|
* に 以下を追記:
|
|
25
26
|
* {
|
|
26
27
|
* "mcpServers": {
|
|
27
28
|
* "argosvix": {
|
|
28
29
|
* "command": "argosvix-mcp",
|
|
29
|
-
* "env": { "ARGOSVIX_API_KEY": "
|
|
30
|
+
* "env": { "ARGOSVIX_API_KEY": "argk_..." }
|
|
30
31
|
* }
|
|
31
32
|
* }
|
|
32
33
|
* }
|
|
33
34
|
* 3. Claude Desktop 再起動 → tools として 自動認識される
|
|
35
|
+
*
|
|
36
|
+
* HTTP install + use:
|
|
37
|
+
* 1. npm install -g @argosvix/mcp-server (= 同パッケージ)
|
|
38
|
+
* 2. argosvix-mcp --http # localhost:3000/mcp で listen
|
|
39
|
+
* 3. client は POST /mcp に Authorization: Bearer <key> + JSON-RPC body
|
|
34
40
|
*/
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
console.error("[argosvix-mcp] ARGOSVIX_API_KEY env var is required. " +
|
|
43
|
-
"Get a key at https://dashboard.argosvix.com/api-keys");
|
|
44
|
-
process.exit(1);
|
|
41
|
+
const argv = process.argv.slice(2);
|
|
42
|
+
// Codex LOW 5 fix: --http のみ受理 (= サブコマンド形式 `argosvix-mcp http` の曖昧
|
|
43
|
+
// 判定を撤廃、 将来の引数追加と衝突しないように)
|
|
44
|
+
const useHttp = argv.includes("--http");
|
|
45
|
+
if (useHttp) {
|
|
46
|
+
const { runHttp } = await import("./http.js");
|
|
47
|
+
await runHttp();
|
|
45
48
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
49
|
+
else {
|
|
50
|
+
const { Server } = await import("@modelcontextprotocol/sdk/server/index.js");
|
|
51
|
+
const { StdioServerTransport } = await import("@modelcontextprotocol/sdk/server/stdio.js");
|
|
52
|
+
const { CallToolRequestSchema, ListToolsRequestSchema } = await import("@modelcontextprotocol/sdk/types.js");
|
|
53
|
+
const { tools, dispatchTool } = await import("./tools.js");
|
|
54
|
+
const API_KEY = process.env["ARGOSVIX_API_KEY"];
|
|
55
|
+
const API_BASE = process.env["ARGOSVIX_API_BASE"] ?? "https://ingest.argosvix.com";
|
|
56
|
+
if (!API_KEY) {
|
|
57
|
+
// eslint-disable-next-line no-console
|
|
58
|
+
console.error("[argosvix-mcp] ARGOSVIX_API_KEY env var is required for stdio mode. " +
|
|
59
|
+
"Get a key at https://dashboard.argosvix.com/api-keys " +
|
|
60
|
+
"(use --http flag for HTTP transport with per-request auth)");
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
const server = new Server({
|
|
64
|
+
name: "argosvix",
|
|
65
|
+
version: "0.3.1-alpha.1",
|
|
66
|
+
}, {
|
|
67
|
+
capabilities: {
|
|
68
|
+
tools: {},
|
|
69
|
+
},
|
|
64
70
|
});
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
71
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
72
|
+
tools,
|
|
73
|
+
}));
|
|
74
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
75
|
+
const { name, arguments: args } = request.params;
|
|
76
|
+
return dispatchTool({
|
|
77
|
+
name,
|
|
78
|
+
args: args ?? {},
|
|
79
|
+
apiKey: API_KEY,
|
|
80
|
+
apiBase: API_BASE,
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
const transport = new StdioServerTransport();
|
|
84
|
+
await server.connect(transport);
|
|
85
|
+
// eslint-disable-next-line no-console
|
|
86
|
+
console.error("[argosvix-mcp] argosvix@0.3.1-alpha.1 ready on stdio transport");
|
|
87
|
+
}
|
|
88
|
+
export {};
|
|
69
89
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,mEAAmE;AACnE,2BAA2B;AAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAExC,IAAI,OAAO,EAAE,CAAC;IACZ,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,OAAO,EAAE,CAAC;AAClB,CAAC;KAAM,CAAC;IACN,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAC;IAC7E,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAC3C,2CAA2C,CAC5C,CAAC;IACF,MAAM,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CACpE,oCAAoC,CACrC,CAAC;IACF,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAE3D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAChD,MAAM,QAAQ,GACZ,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,6BAA6B,CAAC;IAEpE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,sCAAsC;QACtC,OAAO,CAAC,KAAK,CACX,sEAAsE;YACpE,uDAAuD;YACvD,4DAA4D,CAC/D,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,eAAe;KACzB,EACD;QACE,YAAY,EAAE;YACZ,KAAK,EAAE,EAAE;SACV;KACF,CACF,CAAC;IAEF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK;KACN,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACjD,OAAO,YAAY,CAAC;YAClB,IAAI;YACJ,IAAI,EAAE,IAAI,IAAI,EAAE;YAChB,MAAM,EAAE,OAAO;YACf,OAAO,EAAE,QAAQ;SAClB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,sCAAsC;IACtC,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;AAClF,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP prompt definitions + handler (= Phase 3、 2026-05-31)。
|
|
3
|
+
*
|
|
4
|
+
* Prompt は 「user が 明示的に 選んで 起動する template message」 (= slash command 的)。
|
|
5
|
+
* Argosvix では 「LLM observability の 典型 query」 を 1 click で 投入できる scaffold
|
|
6
|
+
* として 3 件 用意する。 各 prompt は user role の text 1 件で、 内容として 必要な
|
|
7
|
+
* argosvix tool 呼出しを agent に 指示する。
|
|
8
|
+
*
|
|
9
|
+
* v1 prompts:
|
|
10
|
+
* - cost_review = 今月 + 直近 7 日の cost トレンドを分析、 異常を report
|
|
11
|
+
* - alert_audit = 現 alert 設定を 監査し、 plan / 用途に応じた 改善案を出す
|
|
12
|
+
* - incident_triage = 直近 N 時間の error / latency 異常を 調査、 root cause を推定
|
|
13
|
+
*
|
|
14
|
+
* v1.5 候補: 動的 argument 補完 (= completion API)、 model 別 / provider 別 template。
|
|
15
|
+
*/
|
|
16
|
+
import type { Prompt, GetPromptResult } from "@modelcontextprotocol/sdk/types.js";
|
|
17
|
+
export declare const prompts: Prompt[];
|
|
18
|
+
export interface GetPromptInput {
|
|
19
|
+
name: string;
|
|
20
|
+
args: Record<string, unknown>;
|
|
21
|
+
}
|
|
22
|
+
export declare class PromptNotFoundError extends Error {
|
|
23
|
+
promptName: string;
|
|
24
|
+
constructor(promptName: string);
|
|
25
|
+
}
|
|
26
|
+
export declare function getPrompt(input: GetPromptInput): GetPromptResult;
|
|
27
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,eAAe,EAChB,MAAM,oCAAoC,CAAC;AAE5C,eAAO,MAAM,OAAO,EAAE,MAAM,EAwC3B,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IACzB,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM;CAItC;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAYhE"}
|
package/dist/prompts.js
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP prompt definitions + handler (= Phase 3、 2026-05-31)。
|
|
3
|
+
*
|
|
4
|
+
* Prompt は 「user が 明示的に 選んで 起動する template message」 (= slash command 的)。
|
|
5
|
+
* Argosvix では 「LLM observability の 典型 query」 を 1 click で 投入できる scaffold
|
|
6
|
+
* として 3 件 用意する。 各 prompt は user role の text 1 件で、 内容として 必要な
|
|
7
|
+
* argosvix tool 呼出しを agent に 指示する。
|
|
8
|
+
*
|
|
9
|
+
* v1 prompts:
|
|
10
|
+
* - cost_review = 今月 + 直近 7 日の cost トレンドを分析、 異常を report
|
|
11
|
+
* - alert_audit = 現 alert 設定を 監査し、 plan / 用途に応じた 改善案を出す
|
|
12
|
+
* - incident_triage = 直近 N 時間の error / latency 異常を 調査、 root cause を推定
|
|
13
|
+
*
|
|
14
|
+
* v1.5 候補: 動的 argument 補完 (= completion API)、 model 別 / provider 別 template。
|
|
15
|
+
*/
|
|
16
|
+
export const prompts = [
|
|
17
|
+
{
|
|
18
|
+
name: "cost_review",
|
|
19
|
+
title: "コスト傾向レビュー",
|
|
20
|
+
description: "argosvix の get_cost_summary tool を 24h / 7d / 30d で順に呼び、 provider 別 " +
|
|
21
|
+
"breakdown を比較して 異常 (= 急増 / 一極集中 / 想定外モデル) を 指摘する。 " +
|
|
22
|
+
"month argument を 渡すと 「先月との 差分」 を 念頭に置いた analysis に carry。",
|
|
23
|
+
arguments: [
|
|
24
|
+
{
|
|
25
|
+
name: "month",
|
|
26
|
+
description: "比較対象月 (= YYYY-MM 形式、 例 2026-04)。 省略すると 今月のみ 評価。",
|
|
27
|
+
required: false,
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: "alert_audit",
|
|
33
|
+
title: "アラート設定 監査",
|
|
34
|
+
description: "argosvix の list_alerts tool で 全 alert を取得し、 plan の制約 (= Free / Pro / Team) と " +
|
|
35
|
+
"実 cost / error rate を 突き合わせて、 通知 channel / sleepMinutes / threshold が 適切か " +
|
|
36
|
+
"review する。 重複 alert や silence しっぱなしの alert も 検出して 提案を出す。",
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: "incident_triage",
|
|
40
|
+
title: "インシデント トリアージ",
|
|
41
|
+
description: "直近 N 時間の error / latency 異常を 調査する。 list_alert_events で 最近の trigger を " +
|
|
42
|
+
"確認し、 query_calls で 該当時間帯の生データを引いて、 root cause (= 特定 model / " +
|
|
43
|
+
"provider 障害 / cost spike) を 推定して report する。",
|
|
44
|
+
arguments: [
|
|
45
|
+
{
|
|
46
|
+
name: "hours",
|
|
47
|
+
description: "調査する遡及時間 (= 例 6 / 24 / 72)。 省略時は 24。",
|
|
48
|
+
required: false,
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
];
|
|
53
|
+
export class PromptNotFoundError extends Error {
|
|
54
|
+
promptName;
|
|
55
|
+
constructor(promptName) {
|
|
56
|
+
super(`prompt not found: ${promptName}`);
|
|
57
|
+
this.promptName = promptName;
|
|
58
|
+
this.name = "PromptNotFoundError";
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export function getPrompt(input) {
|
|
62
|
+
const { name, args } = input;
|
|
63
|
+
switch (name) {
|
|
64
|
+
case "cost_review":
|
|
65
|
+
return buildCostReview(args);
|
|
66
|
+
case "alert_audit":
|
|
67
|
+
return buildAlertAudit();
|
|
68
|
+
case "incident_triage":
|
|
69
|
+
return buildIncidentTriage(args);
|
|
70
|
+
default:
|
|
71
|
+
throw new PromptNotFoundError(name);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function buildCostReview(args) {
|
|
75
|
+
const month = sanitizeMonth(args["month"]);
|
|
76
|
+
const monthLine = month
|
|
77
|
+
? `\n比較対象月: ${month} (= 先月との差分も 念頭に置いて分析する)`
|
|
78
|
+
: "\n今月 + 直近 7 日のみを 評価する (= 比較対象月の指定なし)。";
|
|
79
|
+
return {
|
|
80
|
+
description: "Argosvix の cost トレンドを 自動分析する prompt",
|
|
81
|
+
messages: [
|
|
82
|
+
{
|
|
83
|
+
role: "user",
|
|
84
|
+
content: {
|
|
85
|
+
type: "text",
|
|
86
|
+
text: "Argosvix tool を使って LLM cost の トレンドを分析してください。\n\n" +
|
|
87
|
+
"実行手順:\n" +
|
|
88
|
+
"1. get_cost_summary(rangePreset=\"24h\", groupBy=\"provider\") を呼んで 直近 24h の cost を取得\n" +
|
|
89
|
+
"2. get_cost_summary(rangePreset=\"7d\", groupBy=\"provider\") を 7d で取得\n" +
|
|
90
|
+
"3. get_cost_summary(rangePreset=\"30d\", groupBy=\"provider\") を 30d で取得\n" +
|
|
91
|
+
"4. provider 別 breakdown を比較し、 以下を report する:\n" +
|
|
92
|
+
" - 全体 cost の trend (= 増 / 減 / 安定)\n" +
|
|
93
|
+
" - provider シェアの偏り (= 1 provider に 80% 集中 等)\n" +
|
|
94
|
+
" - 想定外モデル (= 上位 model に コスト上 違和感ない か)\n" +
|
|
95
|
+
" - 24h スパイク (= 30d 平均 比で 異常 か)\n" +
|
|
96
|
+
monthLine,
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function buildAlertAudit() {
|
|
103
|
+
return {
|
|
104
|
+
description: "Argosvix alert 設定を 監査して 改善案を 出す prompt",
|
|
105
|
+
messages: [
|
|
106
|
+
{
|
|
107
|
+
role: "user",
|
|
108
|
+
content: {
|
|
109
|
+
type: "text",
|
|
110
|
+
text: "Argosvix の alert 設定を 監査してください。\n\n" +
|
|
111
|
+
"実行手順:\n" +
|
|
112
|
+
"1. list_alerts(includeTriggered=true) で 全 alert + 直近 trigger 状況を取得\n" +
|
|
113
|
+
"2. 各 alert について 以下を review:\n" +
|
|
114
|
+
" - threshold の妥当性 (= 実 cost / error rate / latency 分布に対して 過敏 or 緩すぎないか)\n" +
|
|
115
|
+
" - sleepMinutes (= 連続発火を抑制する間隔、 5 分未満は alert 嵐の温床)\n" +
|
|
116
|
+
" - channel (= Free plan で email のみ / Pro+ で 適切な channel を 使えているか)\n" +
|
|
117
|
+
" - 重複 (= 同じ provider × 同じ閾値で 複数 alert が ないか)\n" +
|
|
118
|
+
" - silence しっぱなし (= 長期間 silenced で 実質 disable に なっていないか)\n" +
|
|
119
|
+
"3. 改善案を 「重要度: 高 / 中 / 低」 で 仕分けて 出力する。",
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function buildIncidentTriage(args) {
|
|
126
|
+
const hours = sanitizeHours(args["hours"]);
|
|
127
|
+
return {
|
|
128
|
+
description: `直近 ${hours}h の error / latency 異常を triage する prompt`,
|
|
129
|
+
messages: [
|
|
130
|
+
{
|
|
131
|
+
role: "user",
|
|
132
|
+
content: {
|
|
133
|
+
type: "text",
|
|
134
|
+
text: `直近 ${hours} 時間の error / latency 異常を 調査してください。\n\n` +
|
|
135
|
+
"実行手順:\n" +
|
|
136
|
+
`1. list_alert_events(limit=50) で 直近 ${hours} 時間の trigger 履歴を取得\n` +
|
|
137
|
+
`2. 異常な provider / model が 浮上したら query_calls(rangePreset="24h", limit=200) で 該当 ` +
|
|
138
|
+
"record を引く (= provider / model で filter)\n" +
|
|
139
|
+
"3. root cause を 以下のいずれかに分類:\n" +
|
|
140
|
+
" - 特定 provider の障害 (= 全 model で error 同時上昇)\n" +
|
|
141
|
+
" - 特定 model の degradation (= 同 provider 内で 1 model のみ error)\n" +
|
|
142
|
+
" - cost spike (= 想定外 model の 過剰呼び出し / loop)\n" +
|
|
143
|
+
" - latency 上昇 (= timeout 起因か、 prompt 長 起因か)\n" +
|
|
144
|
+
"4. 推定された root cause + 推奨アクションを report。",
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function sanitizeMonth(value) {
|
|
151
|
+
if (typeof value !== "string")
|
|
152
|
+
return null;
|
|
153
|
+
// YYYY-MM 形式のみ受理 (= prompt text 注入防御)
|
|
154
|
+
return /^\d{4}-\d{2}$/.test(value) ? value : null;
|
|
155
|
+
}
|
|
156
|
+
function sanitizeHours(value) {
|
|
157
|
+
if (typeof value === "number" && Number.isFinite(value)) {
|
|
158
|
+
const n = Math.floor(value);
|
|
159
|
+
if (n >= 1 && n <= 168)
|
|
160
|
+
return n;
|
|
161
|
+
}
|
|
162
|
+
if (typeof value === "string") {
|
|
163
|
+
const n = Number.parseInt(value, 10);
|
|
164
|
+
if (Number.isFinite(n) && n >= 1 && n <= 168)
|
|
165
|
+
return n;
|
|
166
|
+
}
|
|
167
|
+
return 24;
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP resource definitions + reader (= Phase 3、 2026-05-31)。
|
|
3
|
+
*
|
|
4
|
+
* Resource は 「AI agent に 自動的に 文脈として渡す read-only data」 (= tools が
|
|
5
|
+
* 「呼ぶ」 のに対し resource は 「読み込む」)。 host application が 自前で 選んで
|
|
6
|
+
* context に入れるか、 prompt から `resource` content として 埋め込むことができる。
|
|
7
|
+
*
|
|
8
|
+
* v1 で expose する静的 resource は account の現状を スナップショットで返す 3 つ:
|
|
9
|
+
* - argosvix://account = plan / quota / 今月の使用量 (= /v1/billing/status)
|
|
10
|
+
* - argosvix://alerts/active = enabled な alert 一覧 (= /v1/alerts から filter)
|
|
11
|
+
* - argosvix://cost/today = 直近 24h の cost 集計 (= /v1/query/aggregate)
|
|
12
|
+
*
|
|
13
|
+
* v1.5 候補: resource template (= argosvix://calls/{id} 等)、 subscribe / listChanged。
|
|
14
|
+
*/
|
|
15
|
+
import type { Resource } from "@modelcontextprotocol/sdk/types.js";
|
|
16
|
+
export declare const resources: Resource[];
|
|
17
|
+
export interface ReadResourceInput {
|
|
18
|
+
uri: string;
|
|
19
|
+
apiKey: string;
|
|
20
|
+
apiBase: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ResourceContentText {
|
|
23
|
+
uri: string;
|
|
24
|
+
mimeType: string;
|
|
25
|
+
text: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function readResource(input: ReadResourceInput): Promise<{
|
|
28
|
+
contents: ResourceContentText[];
|
|
29
|
+
}>;
|
|
30
|
+
export declare class ResourceNotFoundError extends Error {
|
|
31
|
+
uri: string;
|
|
32
|
+
constructor(uri: string);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAMnE,eAAO,MAAM,SAAS,EAAE,QAAQ,EA4B/B,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,iBAAiB,GACvB,OAAO,CAAC;IAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAA;CAAE,CAAC,CA8B9C;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC3B,GAAG,EAAE,MAAM;gBAAX,GAAG,EAAE,MAAM;CAI/B"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP resource definitions + reader (= Phase 3、 2026-05-31)。
|
|
3
|
+
*
|
|
4
|
+
* Resource は 「AI agent に 自動的に 文脈として渡す read-only data」 (= tools が
|
|
5
|
+
* 「呼ぶ」 のに対し resource は 「読み込む」)。 host application が 自前で 選んで
|
|
6
|
+
* context に入れるか、 prompt から `resource` content として 埋め込むことができる。
|
|
7
|
+
*
|
|
8
|
+
* v1 で expose する静的 resource は account の現状を スナップショットで返す 3 つ:
|
|
9
|
+
* - argosvix://account = plan / quota / 今月の使用量 (= /v1/billing/status)
|
|
10
|
+
* - argosvix://alerts/active = enabled な alert 一覧 (= /v1/alerts から filter)
|
|
11
|
+
* - argosvix://cost/today = 直近 24h の cost 集計 (= /v1/query/aggregate)
|
|
12
|
+
*
|
|
13
|
+
* v1.5 候補: resource template (= argosvix://calls/{id} 等)、 subscribe / listChanged。
|
|
14
|
+
*/
|
|
15
|
+
const ACCOUNT_URI = "argosvix://account";
|
|
16
|
+
const ALERTS_ACTIVE_URI = "argosvix://alerts/active";
|
|
17
|
+
const COST_TODAY_URI = "argosvix://cost/today";
|
|
18
|
+
export const resources = [
|
|
19
|
+
{
|
|
20
|
+
uri: ACCOUNT_URI,
|
|
21
|
+
name: "account",
|
|
22
|
+
title: "Argosvix アカウント",
|
|
23
|
+
description: "現在のアカウントの plan / quota / 今月の record 使用量 / retention 設定の snapshot。 " +
|
|
24
|
+
"billing status endpoint をそのまま JSON で返す。",
|
|
25
|
+
mimeType: "application/json",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
uri: ALERTS_ACTIVE_URI,
|
|
29
|
+
name: "alerts_active",
|
|
30
|
+
title: "現 active alert 一覧",
|
|
31
|
+
description: "enabled な alert の一覧 (= silenced も含む、 enabled=false は除外)。 " +
|
|
32
|
+
"list_alerts tool が返す形と同じ shape を snapshot として返す。",
|
|
33
|
+
mimeType: "application/json",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
uri: COST_TODAY_URI,
|
|
37
|
+
name: "cost_today",
|
|
38
|
+
title: "今日の cost summary",
|
|
39
|
+
description: "直近 24 時間の cost / call / token 集計を provider 別 breakdown 付きで snapshot。 " +
|
|
40
|
+
"get_cost_summary(rangePreset=24h, groupBy=provider) と同等。",
|
|
41
|
+
mimeType: "application/json",
|
|
42
|
+
},
|
|
43
|
+
];
|
|
44
|
+
export async function readResource(input) {
|
|
45
|
+
const { uri, apiKey, apiBase } = input;
|
|
46
|
+
switch (uri) {
|
|
47
|
+
case ACCOUNT_URI:
|
|
48
|
+
return await fetchAsResource(uri, apiBase, "/v1/billing/status", {}, apiKey);
|
|
49
|
+
case ALERTS_ACTIVE_URI: {
|
|
50
|
+
const raw = await fetchJson(apiBase, "/v1/alerts", {}, apiKey);
|
|
51
|
+
const filtered = filterEnabledAlerts(raw);
|
|
52
|
+
return {
|
|
53
|
+
contents: [
|
|
54
|
+
{
|
|
55
|
+
uri,
|
|
56
|
+
mimeType: "application/json",
|
|
57
|
+
text: JSON.stringify(filtered, null, 2),
|
|
58
|
+
},
|
|
59
|
+
],
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
case COST_TODAY_URI:
|
|
63
|
+
return await fetchAsResource(uri, apiBase, "/v1/query/aggregate", { rangePreset: "24h", groupBy: "provider" }, apiKey);
|
|
64
|
+
default:
|
|
65
|
+
// -32002 Resource not found を 上位で投げてもらう用に Error throw
|
|
66
|
+
throw new ResourceNotFoundError(uri);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export class ResourceNotFoundError extends Error {
|
|
70
|
+
uri;
|
|
71
|
+
constructor(uri) {
|
|
72
|
+
super(`resource not found: ${uri}`);
|
|
73
|
+
this.uri = uri;
|
|
74
|
+
this.name = "ResourceNotFoundError";
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async function fetchAsResource(uri, apiBase, path, query, apiKey) {
|
|
78
|
+
const json = await fetchJson(apiBase, path, query, apiKey);
|
|
79
|
+
return {
|
|
80
|
+
contents: [
|
|
81
|
+
{
|
|
82
|
+
uri,
|
|
83
|
+
mimeType: "application/json",
|
|
84
|
+
text: JSON.stringify(json, null, 2),
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
async function fetchJson(apiBase, path, query, apiKey) {
|
|
90
|
+
const url = new URL(path, apiBase);
|
|
91
|
+
for (const [k, v] of Object.entries(query))
|
|
92
|
+
url.searchParams.set(k, v);
|
|
93
|
+
const res = await fetch(url.toString(), {
|
|
94
|
+
method: "GET",
|
|
95
|
+
redirect: "error",
|
|
96
|
+
headers: {
|
|
97
|
+
Authorization: `Bearer ${apiKey}`,
|
|
98
|
+
Accept: "application/json",
|
|
99
|
+
"User-Agent": "argosvix-mcp-server-resource",
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
if (!res.ok) {
|
|
103
|
+
const body = await res.text().catch(() => "");
|
|
104
|
+
throw new Error(`Argosvix API ${path} returned ${res.status}: ${body.slice(0, 300)}`);
|
|
105
|
+
}
|
|
106
|
+
return await res.json();
|
|
107
|
+
}
|
|
108
|
+
function filterEnabledAlerts(raw) {
|
|
109
|
+
// backend list_alerts は { alerts: [...] } 形式を 返す想定。 unknown shape にも
|
|
110
|
+
// 安全に対処 (= alert key 無ければそのまま返す)。
|
|
111
|
+
if (typeof raw === "object" &&
|
|
112
|
+
raw !== null &&
|
|
113
|
+
"alerts" in raw &&
|
|
114
|
+
Array.isArray(raw.alerts)) {
|
|
115
|
+
const alerts = raw.alerts;
|
|
116
|
+
return {
|
|
117
|
+
...raw,
|
|
118
|
+
alerts: alerts.filter((a) => a["enabled"] !== false),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return raw;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../src/resources.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAwC/D,eAAO,MAAM,KAAK,EAAE,IAAI,EAuRvB,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;IAChE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC,CAqID"}
|