rq-scan-mcp 1.0.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/README.md +222 -0
- package/dist/client/index.d.ts +95 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +223 -0
- package/dist/client/index.js.map +1 -0
- package/dist/config/index.d.ts +14 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +37 -0
- package/dist/config/index.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/resources/index.d.ts +5 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +5 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/workflows.d.ts +22 -0
- package/dist/resources/workflows.d.ts.map +1 -0
- package/dist/resources/workflows.js +100 -0
- package/dist/resources/workflows.js.map +1 -0
- package/dist/server.d.ts +13 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +144 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +7 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/processing.d.ts +54 -0
- package/dist/tools/processing.d.ts.map +1 -0
- package/dist/tools/processing.js +699 -0
- package/dist/tools/processing.js.map +1 -0
- package/dist/tools/settings.d.ts +12 -0
- package/dist/tools/settings.d.ts.map +1 -0
- package/dist/tools/settings.js +364 -0
- package/dist/tools/settings.js.map +1 -0
- package/dist/tools/workflows.d.ts +22 -0
- package/dist/tools/workflows.d.ts.map +1 -0
- package/dist/tools/workflows.js +171 -0
- package/dist/tools/workflows.js.map +1 -0
- package/dist/types/index.d.ts +140 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/error.d.ts +41 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/error.js +97 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/logger.d.ts +17 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +61 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +62 -0
package/README.md
ADDED
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
# RQ-SCAN MCP Server
|
|
2
|
+
|
|
3
|
+
RQ-SCANドキュメント処理プラットフォーム用のMCP(Model Context Protocol)サーバーです。
|
|
4
|
+
|
|
5
|
+
Claude DesktopやClaude CodeからRQ-SCANの機能を直接操作できます。
|
|
6
|
+
|
|
7
|
+
## インストール
|
|
8
|
+
|
|
9
|
+
### npx(推奨)
|
|
10
|
+
|
|
11
|
+
インストール不要で即座に利用開始できます:
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"mcpServers": {
|
|
16
|
+
"rq-scan": {
|
|
17
|
+
"command": "npx",
|
|
18
|
+
"args": ["-y", "rq-scan-mcp"],
|
|
19
|
+
"env": {
|
|
20
|
+
"RQSCAN_API_KEY": "your-api-key",
|
|
21
|
+
"RQSCAN_ORGANIZATION_ID": "your-organization-id"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### ローカルインストール
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npm install -g rq-scan-mcp
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 環境変数
|
|
35
|
+
|
|
36
|
+
| 変数名 | 必須 | 説明 | デフォルト |
|
|
37
|
+
|--------|------|------|-----------|
|
|
38
|
+
| `RQSCAN_API_URL` | - | RQ-SCAN APIのURL | `https://api.rq-scan.com` |
|
|
39
|
+
| `RQSCAN_API_KEY` | Yes | APIキー | - |
|
|
40
|
+
| `RQSCAN_ORGANIZATION_ID` | Yes | 組織ID | - |
|
|
41
|
+
| `RQSCAN_WORKSPACE_ID` | - | ワークスペースID | - |
|
|
42
|
+
|
|
43
|
+
## 利用可能なツール
|
|
44
|
+
|
|
45
|
+
### ワークフロー管理
|
|
46
|
+
- **`list_workflows`** - ワークフロー一覧を取得
|
|
47
|
+
- **`get_workflow`** - ワークフローの詳細情報を取得
|
|
48
|
+
|
|
49
|
+
### スキャン設定(FormatRule)
|
|
50
|
+
- **`create_format_rule`** - スキャン設定を作成・更新
|
|
51
|
+
- **`get_format_rule`** - 最新のスキャン設定を取得
|
|
52
|
+
- **`list_format_rules`** - スキャン設定の履歴一覧を取得
|
|
53
|
+
|
|
54
|
+
### ファイルアップロード・処理
|
|
55
|
+
- **`create_upload_set`** - アップロードセット(バッチ)を作成
|
|
56
|
+
- **`upload_file`** - ファイルをアップロード
|
|
57
|
+
- **`start_processing`** - AI処理を開始
|
|
58
|
+
- **`get_processing_status`** - 処理状況を確認
|
|
59
|
+
|
|
60
|
+
### 結果取得
|
|
61
|
+
- **`get_results`** - 抽出結果のサマリーを表示
|
|
62
|
+
- **`export_csv`** - 結果をCSV形式で出力
|
|
63
|
+
|
|
64
|
+
## Claude Desktopでの設定
|
|
65
|
+
|
|
66
|
+
### macOS
|
|
67
|
+
|
|
68
|
+
`~/Library/Application Support/Claude/claude_desktop_config.json` を編集:
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"mcpServers": {
|
|
73
|
+
"rq-scan": {
|
|
74
|
+
"command": "npx",
|
|
75
|
+
"args": ["-y", "rq-scan-mcp"],
|
|
76
|
+
"env": {
|
|
77
|
+
"RQSCAN_API_KEY": "your-api-key",
|
|
78
|
+
"RQSCAN_ORGANIZATION_ID": "your-organization-id"
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Windows
|
|
86
|
+
|
|
87
|
+
`%APPDATA%\Claude\claude_desktop_config.json` を編集:
|
|
88
|
+
|
|
89
|
+
```json
|
|
90
|
+
{
|
|
91
|
+
"mcpServers": {
|
|
92
|
+
"rq-scan": {
|
|
93
|
+
"command": "npx",
|
|
94
|
+
"args": ["-y", "rq-scan-mcp"],
|
|
95
|
+
"env": {
|
|
96
|
+
"RQSCAN_API_KEY": "your-api-key",
|
|
97
|
+
"RQSCAN_ORGANIZATION_ID": "your-organization-id"
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
設定後、Claude Desktopを再起動してください。
|
|
105
|
+
|
|
106
|
+
## 使用例
|
|
107
|
+
|
|
108
|
+
### 基本的なワークフロー
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
1. ワークフロー一覧を確認
|
|
112
|
+
→ list_workflows
|
|
113
|
+
|
|
114
|
+
2. スキャン設定を作成
|
|
115
|
+
→ create_format_rule
|
|
116
|
+
例: 請求日、金額、発行元などの抽出項目を定義
|
|
117
|
+
|
|
118
|
+
3. ファイルをアップロード
|
|
119
|
+
→ create_upload_set → upload_file
|
|
120
|
+
|
|
121
|
+
4. AI処理を実行
|
|
122
|
+
→ start_processing → get_processing_status(完了まで待機)
|
|
123
|
+
|
|
124
|
+
5. 結果を確認
|
|
125
|
+
→ get_results または export_csv
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### スキャン設定の作成例
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
ユーザー: 「請求書から請求日、金額、発行元を抽出する設定を作成して」
|
|
132
|
+
|
|
133
|
+
Claude: create_format_ruleツールを使用して...
|
|
134
|
+
|
|
135
|
+
設定名: 請求書スキャン設定
|
|
136
|
+
抽出項目:
|
|
137
|
+
- 請求日: 請求書の発行日をYYYY-MM-DD形式で抽出
|
|
138
|
+
- 金額: 請求金額(税込)を数値のみで抽出
|
|
139
|
+
- 発行元: 発行元の会社名を抽出
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### ファイル処理と結果取得
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
ユーザー: 「/path/to/invoice.pdf をアップロードして処理して」
|
|
146
|
+
|
|
147
|
+
Claude:
|
|
148
|
+
1. create_upload_setで「請求書処理」を作成
|
|
149
|
+
2. upload_fileでファイルをアップロード
|
|
150
|
+
3. start_processingでAI処理を開始
|
|
151
|
+
4. get_processing_statusで完了を確認
|
|
152
|
+
5. get_resultsで結果を表示
|
|
153
|
+
|
|
154
|
+
抽出結果:
|
|
155
|
+
- 請求日: 2024-01-15
|
|
156
|
+
- 金額: 110000
|
|
157
|
+
- 発行元: 株式会社サンプル
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## トラブルシューティング
|
|
161
|
+
|
|
162
|
+
### 「API key is required」エラー
|
|
163
|
+
|
|
164
|
+
環境変数 `RQSCAN_API_KEY` が設定されていません。
|
|
165
|
+
- Claude Desktop設定ファイルの `env` セクションを確認
|
|
166
|
+
- APIキーはRQ-SCAN管理画面から取得可能
|
|
167
|
+
|
|
168
|
+
### 「Organization ID is required」エラー
|
|
169
|
+
|
|
170
|
+
環境変数 `RQSCAN_ORGANIZATION_ID` が設定されていません。
|
|
171
|
+
- RQ-SCANの管理画面で組織IDを確認
|
|
172
|
+
- 設定ファイルに追加
|
|
173
|
+
|
|
174
|
+
### Claude Desktopでツールが表示されない
|
|
175
|
+
|
|
176
|
+
1. 設定ファイルのJSON構文が正しいか確認
|
|
177
|
+
2. Claude Desktopを完全に再起動
|
|
178
|
+
3. `npx -y rq-scan-mcp` をターミナルで直接実行してエラーを確認
|
|
179
|
+
|
|
180
|
+
### ファイルアップロードが失敗する
|
|
181
|
+
|
|
182
|
+
- 対応形式: PDF, JPEG, PNG
|
|
183
|
+
- ファイルパスが正しいか確認(絶対パス推奨)
|
|
184
|
+
- ファイルサイズ制限を確認
|
|
185
|
+
|
|
186
|
+
## 開発者向け
|
|
187
|
+
|
|
188
|
+
### ローカルビルド
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
git clone https://github.com/RECERQA/rq-scan.git
|
|
192
|
+
cd rq-scan/rq-scan-mcp
|
|
193
|
+
npm install
|
|
194
|
+
npm run build
|
|
195
|
+
npm test
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### ローカル開発での使用
|
|
199
|
+
|
|
200
|
+
```json
|
|
201
|
+
{
|
|
202
|
+
"mcpServers": {
|
|
203
|
+
"rq-scan": {
|
|
204
|
+
"command": "node",
|
|
205
|
+
"args": ["/path/to/rq-scan-mcp/dist/index.js"],
|
|
206
|
+
"env": {
|
|
207
|
+
"RQSCAN_API_KEY": "your-api-key",
|
|
208
|
+
"RQSCAN_ORGANIZATION_ID": "your-organization-id"
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## ライセンス
|
|
216
|
+
|
|
217
|
+
MIT License - Copyright (c) RECERQA Inc.
|
|
218
|
+
|
|
219
|
+
## サポート
|
|
220
|
+
|
|
221
|
+
- Issues: https://github.com/RECERQA/rq-scan/issues
|
|
222
|
+
- ドキュメント: https://rq-scan.com/docs
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RQ-SCAN APIクライアント
|
|
3
|
+
*/
|
|
4
|
+
import type { RqScanConfig, Workflow, WorkflowDetailResponse, UploadSet, Page, CreateFormatRuleRequest, FormatRuleResponse, FormatRuleListResponse } from '../types/index.js';
|
|
5
|
+
import { RqScanError, RqScanErrorCode } from '../utils/error.js';
|
|
6
|
+
export declare class RqScanClient {
|
|
7
|
+
private readonly config;
|
|
8
|
+
private readonly baseUrl;
|
|
9
|
+
constructor(config: RqScanConfig);
|
|
10
|
+
/**
|
|
11
|
+
* HTTPリクエストを実行
|
|
12
|
+
*/
|
|
13
|
+
private request;
|
|
14
|
+
/**
|
|
15
|
+
* ワークフロー一覧を取得
|
|
16
|
+
*/
|
|
17
|
+
listWorkflows(): Promise<Workflow[]>;
|
|
18
|
+
/**
|
|
19
|
+
* ワークフロー詳細を取得
|
|
20
|
+
*/
|
|
21
|
+
getWorkflow(workflowId: string): Promise<WorkflowDetailResponse>;
|
|
22
|
+
/**
|
|
23
|
+
* アップロードセット一覧を取得
|
|
24
|
+
*/
|
|
25
|
+
listUploadSets(workflowId: string): Promise<UploadSet[]>;
|
|
26
|
+
/**
|
|
27
|
+
* ページ一覧を取得
|
|
28
|
+
*/
|
|
29
|
+
getPages(uploadSetId: string): Promise<Page[]>;
|
|
30
|
+
/**
|
|
31
|
+
* OCRステータスを取得
|
|
32
|
+
*/
|
|
33
|
+
getOcrStatus(uploadSetId: string): Promise<{
|
|
34
|
+
total_page_count: number;
|
|
35
|
+
processed_page_count: number;
|
|
36
|
+
error_file_names: string[];
|
|
37
|
+
}>;
|
|
38
|
+
/**
|
|
39
|
+
* アップロードセットを作成
|
|
40
|
+
*/
|
|
41
|
+
createUploadSet(params: {
|
|
42
|
+
workflowId: string;
|
|
43
|
+
name: string;
|
|
44
|
+
}): Promise<{
|
|
45
|
+
id: string;
|
|
46
|
+
workflow_id: string;
|
|
47
|
+
name: string;
|
|
48
|
+
}>;
|
|
49
|
+
/**
|
|
50
|
+
* ファイルをアップロード
|
|
51
|
+
*/
|
|
52
|
+
uploadFile(uploadSetId: string, file: {
|
|
53
|
+
name: string;
|
|
54
|
+
content: Buffer | string;
|
|
55
|
+
mimeType: string;
|
|
56
|
+
}): Promise<{
|
|
57
|
+
id: string;
|
|
58
|
+
filename: string;
|
|
59
|
+
status: string;
|
|
60
|
+
}>;
|
|
61
|
+
/**
|
|
62
|
+
* ファイル処理ステータスを取得(v2)
|
|
63
|
+
*/
|
|
64
|
+
getFileProcessStatus(uploadSetId: string): Promise<{
|
|
65
|
+
total_page_count: number;
|
|
66
|
+
processed_page_count: number;
|
|
67
|
+
error_file_infos: Array<{
|
|
68
|
+
filename: string;
|
|
69
|
+
error_code: string;
|
|
70
|
+
error_message: string;
|
|
71
|
+
}>;
|
|
72
|
+
}>;
|
|
73
|
+
/**
|
|
74
|
+
* フォーマット処理を実行(OCR結果をAI処理)
|
|
75
|
+
*/
|
|
76
|
+
runFormat(uploadSetId: string, pageIds: string[]): Promise<Page[]>;
|
|
77
|
+
/**
|
|
78
|
+
* CSVをエクスポート
|
|
79
|
+
*/
|
|
80
|
+
exportCsv(uploadSetId: string): Promise<string>;
|
|
81
|
+
/**
|
|
82
|
+
* FormatRule(スキャン設定)を作成/更新
|
|
83
|
+
*/
|
|
84
|
+
createFormatRule(workflowId: string, params: CreateFormatRuleRequest): Promise<FormatRuleResponse>;
|
|
85
|
+
/**
|
|
86
|
+
* 最新のFormatRule(スキャン設定)を取得
|
|
87
|
+
*/
|
|
88
|
+
getLatestFormatRule(workflowId: string): Promise<FormatRuleResponse>;
|
|
89
|
+
/**
|
|
90
|
+
* FormatRule(スキャン設定)履歴一覧を取得
|
|
91
|
+
*/
|
|
92
|
+
listFormatRules(workflowId: string): Promise<FormatRuleListResponse>;
|
|
93
|
+
}
|
|
94
|
+
export { RqScanError, RqScanErrorCode };
|
|
95
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,QAAQ,EACR,sBAAsB,EACtB,SAAS,EACT,IAAI,EACJ,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,eAAe,EAA0B,MAAM,mBAAmB,CAAC;AAGzF,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,YAAY;IAKhC;;OAEG;YACW,OAAO;IA+ErB;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAK1C;;OAEG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAQtE;;OAEG;IACG,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAQ9D;;OAEG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAQpD;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAC/C,gBAAgB,EAAE,MAAM,CAAC;QACzB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,gBAAgB,EAAE,MAAM,EAAE,CAAC;KAC5B,CAAC;IASF;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE;QAC5B,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAc9D;;OAEG;IACG,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QACzB,QAAQ,EAAE,MAAM,CAAC;KAClB,GACA,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IA+C5D;;OAEG;IACG,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QACvD,gBAAgB,EAAE,MAAM,CAAC;QACzB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,gBAAgB,EAAE,KAAK,CAAC;YACtB,QAAQ,EAAE,MAAM,CAAC;YACjB,UAAU,EAAE,MAAM,CAAC;YACnB,aAAa,EAAE,MAAM,CAAC;SACvB,CAAC,CAAC;KACJ,CAAC;IAaF;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAWxE;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+BrD;;OAEG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,kBAAkB,CAAC;IAW9B;;OAEG;IACG,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQ1E;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAO3E;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RQ-SCAN APIクライアント
|
|
3
|
+
*/
|
|
4
|
+
import { RqScanError, RqScanErrorCode, getErrorCodeFromStatus } from '../utils/error.js';
|
|
5
|
+
import { logger } from '../utils/logger.js';
|
|
6
|
+
export class RqScanClient {
|
|
7
|
+
config;
|
|
8
|
+
baseUrl;
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.config = config;
|
|
11
|
+
this.baseUrl = `${config.apiUrl}/externalAPI/${config.organizationId}`;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* HTTPリクエストを実行
|
|
15
|
+
*/
|
|
16
|
+
async request(method, path, options) {
|
|
17
|
+
const url = new URL(`${this.baseUrl}${path}`);
|
|
18
|
+
if (options?.queryParams) {
|
|
19
|
+
Object.entries(options.queryParams).forEach(([key, value]) => {
|
|
20
|
+
url.searchParams.append(key, value);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
const headers = {
|
|
24
|
+
'X-Machine-Apikey': this.config.apiKey,
|
|
25
|
+
'Content-Type': 'application/json',
|
|
26
|
+
};
|
|
27
|
+
if (this.config.workspaceId) {
|
|
28
|
+
headers['X-Workspace-Id'] = this.config.workspaceId;
|
|
29
|
+
}
|
|
30
|
+
logger.debug(`API Request: ${method} ${url.toString()}`);
|
|
31
|
+
try {
|
|
32
|
+
const response = await fetch(url.toString(), {
|
|
33
|
+
method,
|
|
34
|
+
headers,
|
|
35
|
+
body: options?.body ? JSON.stringify(options.body) : undefined,
|
|
36
|
+
});
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
const errorCode = getErrorCodeFromStatus(response.status);
|
|
39
|
+
let errorMessage = `HTTP ${response.status}`;
|
|
40
|
+
let errorDetails;
|
|
41
|
+
try {
|
|
42
|
+
const errorBody = (await response.json());
|
|
43
|
+
errorMessage =
|
|
44
|
+
errorBody.message ||
|
|
45
|
+
errorBody.detail ||
|
|
46
|
+
errorMessage;
|
|
47
|
+
errorDetails = errorBody;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// JSONパースに失敗した場合は無視
|
|
51
|
+
}
|
|
52
|
+
throw new RqScanError(errorCode, errorMessage, {
|
|
53
|
+
details: errorDetails,
|
|
54
|
+
retryable: response.status >= 500,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
const data = await response.json();
|
|
58
|
+
logger.debug(`API Response: ${response.status}`, { path });
|
|
59
|
+
return data;
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (error instanceof RqScanError) {
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
// ネットワークエラー
|
|
66
|
+
const networkError = error;
|
|
67
|
+
logger.error('Network error', { error: networkError.message });
|
|
68
|
+
throw new RqScanError(RqScanErrorCode.SYSTEM_NETWORK_ERROR, 'ネットワークエラーが発生しました', {
|
|
69
|
+
details: { originalError: networkError.message },
|
|
70
|
+
retryable: true,
|
|
71
|
+
cause: networkError,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* ワークフロー一覧を取得
|
|
77
|
+
*/
|
|
78
|
+
async listWorkflows() {
|
|
79
|
+
const response = await this.request('GET', '/workflows');
|
|
80
|
+
return response;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* ワークフロー詳細を取得
|
|
84
|
+
*/
|
|
85
|
+
async getWorkflow(workflowId) {
|
|
86
|
+
const response = await this.request('GET', `/workflows/${workflowId}`);
|
|
87
|
+
return response;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* アップロードセット一覧を取得
|
|
91
|
+
*/
|
|
92
|
+
async listUploadSets(workflowId) {
|
|
93
|
+
const response = await this.request('GET', `/workflow/${workflowId}/uploadSets`);
|
|
94
|
+
return response;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* ページ一覧を取得
|
|
98
|
+
*/
|
|
99
|
+
async getPages(uploadSetId) {
|
|
100
|
+
const response = await this.request('GET', `/uploadSets/${uploadSetId}/pages`);
|
|
101
|
+
return response;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* OCRステータスを取得
|
|
105
|
+
*/
|
|
106
|
+
async getOcrStatus(uploadSetId) {
|
|
107
|
+
const response = await this.request('GET', `/uploadSets/${uploadSetId}/ocrStatus`);
|
|
108
|
+
return response;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* アップロードセットを作成
|
|
112
|
+
*/
|
|
113
|
+
async createUploadSet(params) {
|
|
114
|
+
const response = await this.request('POST', '/uploadSets', {
|
|
115
|
+
body: {
|
|
116
|
+
workflow_id: params.workflowId,
|
|
117
|
+
name: params.name,
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
return response;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* ファイルをアップロード
|
|
124
|
+
*/
|
|
125
|
+
async uploadFile(uploadSetId, file) {
|
|
126
|
+
const url = new URL(`${this.baseUrl}/uploadSets/${uploadSetId}/imageFile`);
|
|
127
|
+
const headers = {
|
|
128
|
+
'X-Machine-Apikey': this.config.apiKey,
|
|
129
|
+
};
|
|
130
|
+
if (this.config.workspaceId) {
|
|
131
|
+
headers['X-Workspace-Id'] = this.config.workspaceId;
|
|
132
|
+
}
|
|
133
|
+
// FormDataを作成
|
|
134
|
+
const formData = new FormData();
|
|
135
|
+
// Base64文字列の場合はBufferに変換
|
|
136
|
+
let buffer;
|
|
137
|
+
if (typeof file.content === 'string') {
|
|
138
|
+
buffer = Buffer.from(file.content, 'base64');
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
buffer = file.content;
|
|
142
|
+
}
|
|
143
|
+
// Blobを作成してFormDataに追加
|
|
144
|
+
const blob = new Blob([buffer], { type: file.mimeType });
|
|
145
|
+
formData.append('file', blob, file.name);
|
|
146
|
+
logger.debug(`Uploading file: ${file.name} (${buffer.length} bytes)`);
|
|
147
|
+
const response = await fetch(url.toString(), {
|
|
148
|
+
method: 'POST',
|
|
149
|
+
headers,
|
|
150
|
+
body: formData,
|
|
151
|
+
});
|
|
152
|
+
if (!response.ok) {
|
|
153
|
+
const errorCode = getErrorCodeFromStatus(response.status);
|
|
154
|
+
throw new RqScanError(errorCode, `File upload failed: HTTP ${response.status}`, { retryable: response.status >= 500 });
|
|
155
|
+
}
|
|
156
|
+
const data = (await response.json());
|
|
157
|
+
return data;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* ファイル処理ステータスを取得(v2)
|
|
161
|
+
*/
|
|
162
|
+
async getFileProcessStatus(uploadSetId) {
|
|
163
|
+
const response = await this.request('GET', `/v2/uploadSets/${uploadSetId}/imageFileProcessStatus`);
|
|
164
|
+
return response;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* フォーマット処理を実行(OCR結果をAI処理)
|
|
168
|
+
*/
|
|
169
|
+
async runFormat(uploadSetId, pageIds) {
|
|
170
|
+
const response = await this.request('PUT', `/uploadSets/${uploadSetId}/pages/runFormat`, {
|
|
171
|
+
body: pageIds,
|
|
172
|
+
});
|
|
173
|
+
return response;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* CSVをエクスポート
|
|
177
|
+
*/
|
|
178
|
+
async exportCsv(uploadSetId) {
|
|
179
|
+
const url = new URL(`${this.baseUrl}/uploadSets/${uploadSetId}/csv`);
|
|
180
|
+
const headers = {
|
|
181
|
+
'X-Machine-Apikey': this.config.apiKey,
|
|
182
|
+
};
|
|
183
|
+
if (this.config.workspaceId) {
|
|
184
|
+
headers['X-Workspace-Id'] = this.config.workspaceId;
|
|
185
|
+
}
|
|
186
|
+
const response = await fetch(url.toString(), {
|
|
187
|
+
method: 'GET',
|
|
188
|
+
headers,
|
|
189
|
+
});
|
|
190
|
+
if (!response.ok) {
|
|
191
|
+
throw new RqScanError(getErrorCodeFromStatus(response.status), `CSV export failed: HTTP ${response.status}`, { retryable: response.status >= 500 });
|
|
192
|
+
}
|
|
193
|
+
return await response.text();
|
|
194
|
+
}
|
|
195
|
+
// ==========================================================================
|
|
196
|
+
// FormatRule関連メソッド
|
|
197
|
+
// ==========================================================================
|
|
198
|
+
/**
|
|
199
|
+
* FormatRule(スキャン設定)を作成/更新
|
|
200
|
+
*/
|
|
201
|
+
async createFormatRule(workflowId, params) {
|
|
202
|
+
const response = await this.request('POST', `/workflows/${workflowId}/formatRules`, {
|
|
203
|
+
body: params,
|
|
204
|
+
});
|
|
205
|
+
return response;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* 最新のFormatRule(スキャン設定)を取得
|
|
209
|
+
*/
|
|
210
|
+
async getLatestFormatRule(workflowId) {
|
|
211
|
+
const response = await this.request('GET', `/workflows/${workflowId}/formatRules/latest`);
|
|
212
|
+
return response;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* FormatRule(スキャン設定)履歴一覧を取得
|
|
216
|
+
*/
|
|
217
|
+
async listFormatRules(workflowId) {
|
|
218
|
+
const response = await this.request('GET', `/workflows/${workflowId}/formatRules`);
|
|
219
|
+
return response;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
export { RqScanError, RqScanErrorCode };
|
|
223
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 設定管理モジュール
|
|
3
|
+
* 環境変数から設定を読み込む
|
|
4
|
+
*/
|
|
5
|
+
import type { RqScanConfig } from '../types/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* 環境変数から設定を読み込む
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadConfig(): RqScanConfig;
|
|
10
|
+
/**
|
|
11
|
+
* 設定が有効かどうかを検証
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateConfig(config: RqScanConfig): boolean;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUtD;;GAEG;AACH,wBAAgB,UAAU,IAAI,YAAY,CAgBzC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAE5D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 設定管理モジュール
|
|
3
|
+
* 環境変数から設定を読み込む
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
// 環境変数スキーマ
|
|
7
|
+
const envSchema = z.object({
|
|
8
|
+
RQSCAN_API_URL: z.string().url().default('https://api.rq-scan.com'),
|
|
9
|
+
RQSCAN_API_KEY: z.string().min(1, 'API key is required'),
|
|
10
|
+
RQSCAN_ORGANIZATION_ID: z.string().min(1, 'Organization ID is required'),
|
|
11
|
+
RQSCAN_WORKSPACE_ID: z.string().optional(),
|
|
12
|
+
});
|
|
13
|
+
/**
|
|
14
|
+
* 環境変数から設定を読み込む
|
|
15
|
+
*/
|
|
16
|
+
export function loadConfig() {
|
|
17
|
+
const result = envSchema.safeParse(process.env);
|
|
18
|
+
if (!result.success) {
|
|
19
|
+
const errors = result.error.errors
|
|
20
|
+
.map((e) => `${e.path.join('.')}: ${e.message}`)
|
|
21
|
+
.join('\n');
|
|
22
|
+
throw new Error(`設定エラー:\n${errors}`);
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
apiUrl: result.data.RQSCAN_API_URL,
|
|
26
|
+
apiKey: result.data.RQSCAN_API_KEY,
|
|
27
|
+
organizationId: result.data.RQSCAN_ORGANIZATION_ID,
|
|
28
|
+
workspaceId: result.data.RQSCAN_WORKSPACE_ID,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 設定が有効かどうかを検証
|
|
33
|
+
*/
|
|
34
|
+
export function validateConfig(config) {
|
|
35
|
+
return !!(config.apiUrl && config.apiKey && config.organizationId);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,WAAW;AACX,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;IACzB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,yBAAyB,CAAC;IACnE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,qBAAqB,CAAC;IACxD,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,6BAA6B,CAAC;IACxE,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3C,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEhD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aAC/C,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc;QAClC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,cAAc;QAClC,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB;QAClD,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,mBAAmB;KAC7C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC;AACrE,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* RQ-SCAN MCPサーバー エントリポイント
|
|
4
|
+
*
|
|
5
|
+
* 使用方法:
|
|
6
|
+
* 1. 環境変数を設定:
|
|
7
|
+
* - RQSCAN_API_URL: RQ-SCAN APIのURL(デフォルト: https://api.rq-scan.com)
|
|
8
|
+
* - RQSCAN_API_KEY: APIキー(必須)
|
|
9
|
+
* - RQSCAN_ORGANIZATION_ID: 組織ID(必須)
|
|
10
|
+
* - RQSCAN_WORKSPACE_ID: ワークスペースID(オプション)
|
|
11
|
+
*
|
|
12
|
+
* 2. サーバーを起動:
|
|
13
|
+
* npx rq-scan-mcp
|
|
14
|
+
*
|
|
15
|
+
* Claude Desktop設定例:
|
|
16
|
+
* {
|
|
17
|
+
* "mcpServers": {
|
|
18
|
+
* "rq-scan": {
|
|
19
|
+
* "command": "npx",
|
|
20
|
+
* "args": ["-y", "rq-scan-mcp"],
|
|
21
|
+
* "env": {
|
|
22
|
+
* "RQSCAN_API_URL": "https://api.rq-scan.com",
|
|
23
|
+
* "RQSCAN_API_KEY": "your-api-key",
|
|
24
|
+
* "RQSCAN_ORGANIZATION_ID": "your-org-id"
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
* }
|
|
28
|
+
* }
|
|
29
|
+
*/
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG"}
|