reportflow-mcp 1.1.3 → 1.2.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.
Files changed (49) hide show
  1. package/dist/auth-context.d.ts +10 -0
  2. package/dist/auth-context.d.ts.map +1 -0
  3. package/dist/auth-context.js +10 -0
  4. package/dist/auth-context.js.map +1 -0
  5. package/dist/auth.d.ts +1 -1
  6. package/dist/auth.d.ts.map +1 -1
  7. package/dist/auth.js +27 -3
  8. package/dist/auth.js.map +1 -1
  9. package/dist/client.d.ts +43 -3
  10. package/dist/client.d.ts.map +1 -1
  11. package/dist/client.js +30 -4
  12. package/dist/client.js.map +1 -1
  13. package/dist/config.d.ts +23 -0
  14. package/dist/config.d.ts.map +1 -0
  15. package/dist/config.js +62 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/http-server.d.ts +16 -0
  18. package/dist/http-server.d.ts.map +1 -0
  19. package/dist/http-server.js +267 -0
  20. package/dist/http-server.js.map +1 -0
  21. package/dist/http.d.ts +14 -0
  22. package/dist/http.d.ts.map +1 -1
  23. package/dist/http.js +15 -1
  24. package/dist/http.js.map +1 -1
  25. package/dist/index-http.d.ts +2 -0
  26. package/dist/index-http.d.ts.map +1 -0
  27. package/dist/index-http.js +14 -0
  28. package/dist/index-http.js.map +1 -0
  29. package/dist/server.d.ts +41 -0
  30. package/dist/server.d.ts.map +1 -1
  31. package/dist/server.js +110 -53
  32. package/dist/server.js.map +1 -1
  33. package/dist/telemetry/client.d.ts +30 -0
  34. package/dist/telemetry/client.d.ts.map +1 -0
  35. package/dist/telemetry/client.js +85 -0
  36. package/dist/telemetry/client.js.map +1 -0
  37. package/dist/telemetry/index.d.ts +4 -0
  38. package/dist/telemetry/index.d.ts.map +1 -0
  39. package/dist/telemetry/index.js +11 -0
  40. package/dist/telemetry/index.js.map +1 -0
  41. package/dist/telemetry/interceptor.d.ts +9 -0
  42. package/dist/telemetry/interceptor.d.ts.map +1 -0
  43. package/dist/telemetry/interceptor.js +72 -0
  44. package/dist/telemetry/interceptor.js.map +1 -0
  45. package/dist/tools/generate-pdf-sync.d.ts +32 -8
  46. package/dist/tools/generate-pdf-sync.d.ts.map +1 -1
  47. package/dist/tools/generate-pdf-sync.js +118 -10
  48. package/dist/tools/generate-pdf-sync.js.map +1 -1
  49. package/package.json +10 -1
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.startHttpServer = exports.buildHttpApp = void 0;
7
+ const express_1 = __importDefault(require("express"));
8
+ const cors_1 = __importDefault(require("cors"));
9
+ const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
10
+ const auth_context_js_1 = require("./auth-context.js");
11
+ const config_js_1 = require("./config.js");
12
+ const server_js_1 = require("./server.js");
13
+ const DEFAULT_PORT = 3000;
14
+ const PROTECTED_METHODS = new Set([
15
+ 'tools/call',
16
+ 'resources/read',
17
+ 'resources/list',
18
+ 'prompts/get',
19
+ ]);
20
+ const wwwAuthenticateHeader = () => `Bearer realm="reportflow-mcp", resource_metadata="${config_js_1.MCP_RESOURCE_URL}/.well-known/oauth-protected-resource"`;
21
+ const respondUnauthorized = (res, description, errorCode = 'invalid_token') => {
22
+ res
23
+ .status(401)
24
+ .set('WWW-Authenticate', wwwAuthenticateHeader())
25
+ .json({ error: errorCode, error_description: description });
26
+ };
27
+ const extractBearer = (req) => {
28
+ const header = req.headers.authorization;
29
+ if (!header || typeof header !== 'string')
30
+ return null;
31
+ if (!header.startsWith('Bearer '))
32
+ return null;
33
+ const token = header.slice('Bearer '.length).trim();
34
+ return token.length > 0 ? token : null;
35
+ };
36
+ const requestNeedsAuth = (body) => {
37
+ const messages = Array.isArray(body) ? body : [body];
38
+ return messages.some((msg) => {
39
+ if (!msg || typeof msg !== 'object')
40
+ return false;
41
+ const method = msg.method;
42
+ return typeof method === 'string' && PROTECTED_METHODS.has(method);
43
+ });
44
+ };
45
+ /**
46
+ * Express アプリケーションを構築して返す。listen は呼ばない。
47
+ * テストや埋め込み利用を想定。
48
+ */
49
+ const buildHttpApp = () => {
50
+ const app = (0, express_1.default)();
51
+ app.use((0, cors_1.default)({
52
+ origin: true,
53
+ credentials: false,
54
+ exposedHeaders: ['Mcp-Session-Id', 'Mcp-Protocol-Version'],
55
+ allowedHeaders: [
56
+ 'Content-Type',
57
+ 'Authorization',
58
+ 'Mcp-Session-Id',
59
+ 'Mcp-Protocol-Version',
60
+ 'Last-Event-ID',
61
+ ],
62
+ }));
63
+ app.use(express_1.default.json({ limit: '4mb' }));
64
+ app.get('/healthz', (_req, res) => {
65
+ res.json({ status: 'ok' });
66
+ });
67
+ // RFC 9728 Protected Resource Metadata
68
+ app.get('/.well-known/oauth-protected-resource', (_req, res) => {
69
+ res
70
+ .set('Cache-Control', 'no-cache')
71
+ .json((0, config_js_1.buildProtectedResourceMetadata)());
72
+ });
73
+ // ─── OAuth Proxy ──────────────────────────────────────────────────────────
74
+ // claude.ai 等の MCP クライアントは AS Discovery を経由せず、MCP server URL に
75
+ // 直接 OAuth エンドポイントを叩いてくる実装が多い。このため MCP server で
76
+ // 上流 reposts-api の OAuth endpoints を proxy / redirect する。
77
+ //
78
+ // 認可フロー: AuthorizationCode + PKCE
79
+ // - GET /.well-known/oauth-authorization-server → AS metadata を返す
80
+ // - GET /authorize → 上流 /oauth/authorize へ 302 リダイレクト
81
+ // - POST /token → 上流 /oauth/token へ proxy (form / json 両対応、JSON に変換して転送)
82
+ // - POST /register → 上流 /oauth/register (DCR) へ proxy
83
+ // RFC 8414 Authorization Server Metadata
84
+ app.get('/.well-known/oauth-authorization-server', (_req, res) => {
85
+ res.set('Cache-Control', 'no-cache').json({
86
+ issuer: config_js_1.MCP_RESOURCE_URL,
87
+ authorization_endpoint: `${config_js_1.MCP_RESOURCE_URL}/authorize`,
88
+ token_endpoint: `${config_js_1.MCP_RESOURCE_URL}/token`,
89
+ registration_endpoint: `${config_js_1.MCP_RESOURCE_URL}/register`,
90
+ scopes_supported: [...config_js_1.SUPPORTED_SCOPES],
91
+ response_types_supported: ['code'],
92
+ grant_types_supported: ['authorization_code', 'refresh_token'],
93
+ code_challenge_methods_supported: ['S256'],
94
+ token_endpoint_auth_methods_supported: ['none'],
95
+ });
96
+ });
97
+ // /authorize: GET クエリをそのまま上流 /oauth/authorize に 302
98
+ // NOTE: REPORTFLOW_OAUTH_ISSUER_URL が path prefix (/api/v1) を含むため、
99
+ // new URL('/oauth/authorize', issuer) では leading slash で base path が
100
+ // リセットされてしまう。明示的に文字列結合してから URL を作る。
101
+ app.get('/authorize', (req, res) => {
102
+ const upstream = new URL(`${config_js_1.REPORTFLOW_OAUTH_ISSUER_URL}/oauth/authorize`);
103
+ Object.entries(req.query).forEach(([key, value]) => {
104
+ if (typeof value === 'string')
105
+ upstream.searchParams.set(key, value);
106
+ else if (Array.isArray(value)) {
107
+ for (const v of value) {
108
+ if (typeof v === 'string')
109
+ upstream.searchParams.append(key, v);
110
+ }
111
+ }
112
+ });
113
+ res.redirect(302, upstream.toString());
114
+ });
115
+ // /token: POST body を上流 /oauth/token に proxy
116
+ // claude.ai は form-encoded で送ってくるが、reposts-api (Fastify) は JSON のみ受け付けるため
117
+ // 常に JSON に変換して転送する。RFC 8707 で resource は repeated key になり得るので
118
+ // 配列は単一要素の場合はスカラーに戻す(reposts-api は string を期待)。
119
+ app.post('/token', express_1.default.urlencoded({ extended: true }), (req, res) => {
120
+ const upstream = new URL(`${config_js_1.REPORTFLOW_OAUTH_ISSUER_URL}/oauth/token`);
121
+ const contentType = req.get('Content-Type') ?? 'application/json';
122
+ const isForm = contentType.includes('application/x-www-form-urlencoded');
123
+ let jsonBody;
124
+ if (isForm) {
125
+ jsonBody = {};
126
+ for (const [key, value] of Object.entries(req.body)) {
127
+ if (Array.isArray(value)) {
128
+ const strs = value.filter((v) => typeof v === 'string');
129
+ jsonBody[key] = strs.length === 1 ? strs[0] : strs;
130
+ }
131
+ else if (typeof value === 'string') {
132
+ jsonBody[key] = value;
133
+ }
134
+ }
135
+ }
136
+ else {
137
+ jsonBody = req.body ?? {};
138
+ }
139
+ const authorization = req.get('Authorization');
140
+ const handle = async () => {
141
+ const upstreamRes = await fetch(upstream.toString(), {
142
+ method: 'POST',
143
+ headers: {
144
+ 'Content-Type': 'application/json',
145
+ ...(authorization ? { Authorization: authorization } : {}),
146
+ },
147
+ body: JSON.stringify(jsonBody),
148
+ });
149
+ const text = await upstreamRes.text();
150
+ res
151
+ .status(upstreamRes.status)
152
+ .set('Content-Type', upstreamRes.headers.get('content-type') ?? 'application/json')
153
+ .send(text);
154
+ };
155
+ handle().catch((err) => {
156
+ console.error('OAuth token proxy failed:', err);
157
+ if (!res.headersSent) {
158
+ res.status(502).json({
159
+ error: 'server_error',
160
+ error_description: 'OAuth token proxy failed',
161
+ });
162
+ }
163
+ });
164
+ });
165
+ // /register: POST body を上流 /oauth/register (RFC 7591 DCR) に proxy
166
+ // MCP issuer と同一ドメインに registration_endpoint を置くことで
167
+ // クライアントのドメインチェックに対応する。
168
+ app.post('/register', (req, res) => {
169
+ const upstream = new URL(`${config_js_1.REPORTFLOW_OAUTH_ISSUER_URL}/oauth/register`);
170
+ const handle = async () => {
171
+ const upstreamRes = await fetch(upstream.toString(), {
172
+ method: 'POST',
173
+ headers: { 'Content-Type': 'application/json' },
174
+ body: JSON.stringify(req.body ?? {}),
175
+ });
176
+ const text = await upstreamRes.text();
177
+ res
178
+ .status(upstreamRes.status)
179
+ .set('Content-Type', upstreamRes.headers.get('content-type') ?? 'application/json')
180
+ .set('Cache-Control', 'no-cache')
181
+ .send(text);
182
+ };
183
+ handle().catch((err) => {
184
+ console.error('OAuth register proxy failed:', err);
185
+ if (!res.headersSent) {
186
+ res.status(502).json({
187
+ error: 'server_error',
188
+ error_description: 'OAuth register proxy failed',
189
+ });
190
+ }
191
+ });
192
+ });
193
+ app.all('/mcp', (req, res) => {
194
+ const token = extractBearer(req);
195
+ const needsAuth = requestNeedsAuth(req.body);
196
+ if (needsAuth && !token) {
197
+ respondUnauthorized(res, '保護対象メソッドの呼び出しには Bearer トークンが必要です');
198
+ return;
199
+ }
200
+ // Stateless: per-request server + transport (claude.ai / API connector も stateless モードを推奨)
201
+ const server = (0, server_js_1.createMcpServer)({ mode: 'http' });
202
+ const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
203
+ sessionIdGenerator: undefined,
204
+ });
205
+ res.on('close', () => {
206
+ transport.close().catch(() => { });
207
+ server.close().catch(() => { });
208
+ });
209
+ const handle = async () => {
210
+ await server.connect(transport);
211
+ await transport.handleRequest(req, res, req.body);
212
+ };
213
+ const dispatched = token
214
+ ? (0, auth_context_js_1.runWithHttpAuth)({ accessToken: token }, handle)
215
+ : handle();
216
+ dispatched.catch((err) => {
217
+ console.error('MCP request handling failed:', err);
218
+ if (!res.headersSent) {
219
+ res.status(500).json({
220
+ jsonrpc: '2.0',
221
+ error: { code: -32603, message: 'Internal server error' },
222
+ id: null,
223
+ });
224
+ }
225
+ });
226
+ });
227
+ // 404 for any other path
228
+ app.use((_req, res) => {
229
+ res.status(404).json({ error: 'not_found' });
230
+ });
231
+ return app;
232
+ };
233
+ exports.buildHttpApp = buildHttpApp;
234
+ /**
235
+ * HTTP サーバーモードのエントリポイント
236
+ * `listen` 成功 (listening イベント) または bind エラー (EADDRINUSE 等) で
237
+ * Promise が settle する。呼び出し側でエラーハンドリング可能。
238
+ */
239
+ const startHttpServer = (opts = {}) => {
240
+ const port = opts.port ?? DEFAULT_PORT;
241
+ const app = (0, exports.buildHttpApp)();
242
+ return new Promise((resolve, reject) => {
243
+ const httpServer = app.listen(port);
244
+ let settled = false;
245
+ httpServer.once('listening', () => {
246
+ if (settled)
247
+ return;
248
+ settled = true;
249
+ console.log(`[reportflow-mcp] Streamable HTTP server listening on :${port} (resource=${config_js_1.MCP_RESOURCE_URL})`);
250
+ const shutdown = (signal) => {
251
+ console.log(`[reportflow-mcp] received ${signal}, shutting down`);
252
+ httpServer.close(() => process.exit(0));
253
+ };
254
+ process.on('SIGINT', () => shutdown('SIGINT'));
255
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
256
+ resolve();
257
+ });
258
+ httpServer.once('error', (err) => {
259
+ if (settled)
260
+ return;
261
+ settled = true;
262
+ reject(err);
263
+ });
264
+ });
265
+ };
266
+ exports.startHttpServer = startHttpServer;
267
+ //# sourceMappingURL=http-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"}
package/dist/http.d.ts CHANGED
@@ -8,4 +8,18 @@ export declare function fetchJson<T>(url: string, init?: RequestInit & {
8
8
  export declare function fetchBinary(url: string, init?: RequestInit & {
9
9
  timeoutMs?: number;
10
10
  }): Promise<ArrayBuffer>;
11
+ /**
12
+ * fetchBinary の拡張版。レスポンスヘッダーも返す。
13
+ * content-service の sync エンドポイントが返す
14
+ * `File-URL` / `Request-Id` / `X-File-Mapping` 等を読むために使う。
15
+ *
16
+ * 参照: developer-docs/openapi/content-service.yaml
17
+ * /v1/file/sync/single → 200 with headers (File-URL, Request-Id, X-File-Mapping)
18
+ */
19
+ export declare function fetchBinaryWithHeaders(url: string, init?: RequestInit & {
20
+ timeoutMs?: number;
21
+ }): Promise<{
22
+ data: ArrayBuffer;
23
+ headers: Headers;
24
+ }>;
11
25
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAU,SAAQ,KAAK;aAEhB,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EAC9B,OAAO,EAAE,MAAM;CAKlB;AAwCD,wBAAsB,SAAS,CAAC,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,WAAW,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,OAAO,CAAC,CAAC,CAAC,CAaZ;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,WAAW,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,OAAO,CAAC,WAAW,CAAC,CAatB"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,qBAAa,SAAU,SAAQ,KAAK;aAEhB,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EAC9B,OAAO,EAAE,MAAM;CAKlB;AAwCD,wBAAsB,SAAS,CAAC,CAAC,EAC/B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,WAAW,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,OAAO,CAAC,CAAC,CAAC,CAaZ;AAED,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,WAAW,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,OAAO,CAAC,WAAW,CAAC,CAGtB;AAED;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,WAAW,GAAG;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,OAAO,CAAC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAclD"}
package/dist/http.js CHANGED
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.HttpError = void 0;
4
4
  exports.fetchJson = fetchJson;
5
5
  exports.fetchBinary = fetchBinary;
6
+ exports.fetchBinaryWithHeaders = fetchBinaryWithHeaders;
6
7
  const DEFAULT_TIMEOUT_MS = 30_000;
7
8
  class HttpError extends Error {
8
9
  status;
@@ -56,6 +57,18 @@ async function fetchJson(url, init = {}) {
56
57
  }
57
58
  }
58
59
  async function fetchBinary(url, init = {}) {
60
+ const { data } = await fetchBinaryWithHeaders(url, init);
61
+ return data;
62
+ }
63
+ /**
64
+ * fetchBinary の拡張版。レスポンスヘッダーも返す。
65
+ * content-service の sync エンドポイントが返す
66
+ * `File-URL` / `Request-Id` / `X-File-Mapping` 等を読むために使う。
67
+ *
68
+ * 参照: developer-docs/openapi/content-service.yaml
69
+ * /v1/file/sync/single → 200 with headers (File-URL, Request-Id, X-File-Mapping)
70
+ */
71
+ async function fetchBinaryWithHeaders(url, init = {}) {
59
72
  const { timeoutMs = DEFAULT_TIMEOUT_MS, signal, ...rest } = init;
60
73
  const [timeoutSignal, clearTimer] = withTimeout(signal, timeoutMs);
61
74
  try {
@@ -64,7 +77,8 @@ async function fetchBinary(url, init = {}) {
64
77
  const msg = await parseErrorMessage(res);
65
78
  throw new HttpError(res.status, `[${res.status}] ${msg}`);
66
79
  }
67
- return await res.arrayBuffer();
80
+ const data = await res.arrayBuffer();
81
+ return { data, headers: res.headers };
68
82
  }
69
83
  finally {
70
84
  clearTimer();
package/dist/http.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":";;;AAkDA,8BAgBC;AAED,kCAgBC;AApFD,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,MAAa,SAAU,SAAQ,KAAK;IAEhB;IADlB,YACkB,MAAc,EAC9B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,WAAM,GAAN,MAAM,CAAQ;QAI9B,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AARD,8BAQC;AAED,KAAK,UAAU,iBAAiB,CAAC,GAAa;IAC5C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAG7B,CAAC;QACF,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,iBAAiB,IAAI,GAAG,CAAC,UAAU,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC,UAAU,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,MAAsC,EACtC,EAAU;IAEV,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CACtB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAC,EACpE,EAAE,CACH,CAAC;IAEF,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvD,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,EAAE,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC,CAAC;IACF,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACpC,CAAC;AAEM,KAAK,UAAU,SAAS,CAC7B,GAAW,EACX,OAA6C,EAAE;IAE/C,MAAM,EAAE,SAAS,GAAG,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACjE,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,MAAO,GAAG,CAAC,IAAI,EAAiB,CAAC;IAC1C,CAAC;YAAS,CAAC;QACT,UAAU,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,WAAW,CAC/B,GAAW,EACX,OAA6C,EAAE;IAE/C,MAAM,EAAE,SAAS,GAAG,kBAAkB,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IACjE,MAAM,CAAC,aAAa,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACnE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACzC,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;YAAS,CAAC;QACT,UAAU,EAAE,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index-http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-http.d.ts","sourceRoot":"","sources":["../src/index-http.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const http_server_js_1 = require("./http-server.js");
4
+ const portStr = process.env['PORT'];
5
+ const port = portStr ? parseInt(portStr, 10) : undefined;
6
+ if (port !== undefined && (Number.isNaN(port) || port <= 0)) {
7
+ console.error(`PORT must be a positive integer (got ${portStr})`);
8
+ process.exit(1);
9
+ }
10
+ (0, http_server_js_1.startHttpServer)({ port }).catch((err) => {
11
+ console.error('[reportflow-mcp] Failed to start HTTP server:', err);
12
+ process.exit(1);
13
+ });
14
+ //# sourceMappingURL=index-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-http.js","sourceRoot":"","sources":["../src/index-http.ts"],"names":[],"mappings":";;AAAA,qDAAmD;AAEnD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACpC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;IAC5D,OAAO,CAAC,KAAK,CAAC,wCAAwC,OAAO,GAAG,CAAC,CAAC;IAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAA,gCAAe,EAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC/C,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAC;IACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/dist/server.d.ts CHANGED
@@ -1,2 +1,43 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { z } from 'zod';
3
+ import { type TelemetryClient } from './telemetry/index.js';
4
+ export declare const contentDtoSchema: z.ZodObject<{
5
+ fileName: z.ZodString;
6
+ shareType: z.ZodDefault<z.ZodUnion<[z.ZodLiteral<"01">, z.ZodLiteral<"02">, z.ZodLiteral<"03">]>>;
7
+ passcodeEnabled: z.ZodOptional<z.ZodBoolean>;
8
+ params: z.ZodRecord<z.ZodString, z.ZodUnknown>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ params: Record<string, unknown>;
11
+ fileName: string;
12
+ shareType: "01" | "02" | "03";
13
+ passcodeEnabled?: boolean | undefined;
14
+ }, {
15
+ params: Record<string, unknown>;
16
+ fileName: string;
17
+ shareType?: "01" | "02" | "03" | undefined;
18
+ passcodeEnabled?: boolean | undefined;
19
+ }>;
20
+ export type CreateMcpServerOptions = {
21
+ /**
22
+ * stdio: ローカル CLI として動作。authenticate ツール (ブラウザ起動 + OS keychain 保存) を提供する。
23
+ * http: リモート HTTP サーバー。claude.ai 等の外部クライアントが OAuth を担うため、
24
+ * authenticate ツールは登録しない (誤呼び出しで stdio 専用処理を走らせない)。
25
+ */
26
+ mode?: 'stdio' | 'http';
27
+ /**
28
+ * Telemetry client used to emit `integration.mcp.invoked` events. Defaults
29
+ * to a no-op when `TELEMETRY_ENDPOINT_URL` is unset. Override in tests.
30
+ */
31
+ telemetry?: TelemetryClient;
32
+ };
33
+ /**
34
+ * 全ツール / Prompts / Resources を登録した McpServer を生成して返す。
35
+ * Transport への接続は呼び出し側で行う(stdio: index.ts、HTTP: http-server.ts)。
36
+ */
37
+ export declare const createMcpServer: (opts?: CreateMcpServerOptions) => McpServer;
38
+ /**
39
+ * stdio エントリ用の従来 API。createMcpServer() で生成したインスタンスを
40
+ * StdioServerTransport に connect する。HTTP モードはこの関数を使わない。
41
+ */
1
42
  export declare const startServer: () => Promise<void>;
2
43
  //# sourceMappingURL=server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AA8FA,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CA0IhD,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmCxB,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAU9B,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;EA4B3B,CAAC;AAmDH,MAAM,MAAM,sBAAsB,GAAG;IACnC;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAM,sBAA2B,KAChC,SAyLF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAIhD,CAAC"}