bizgate-mcp-server 0.1.0 → 0.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.
- package/README.md +159 -99
- package/dist/bizgate-client.d.ts +25 -0
- package/dist/bizgate-client.js +45 -0
- package/dist/index.js +41 -14
- package/dist/types.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,161 +1,221 @@
|
|
|
1
1
|
# bizgate-mcp-server
|
|
2
2
|
|
|
3
3
|
BizGate API と Claude を接続する MCP サーバーです。
|
|
4
|
-
|
|
4
|
+
Claude に話しかけるだけで、企業の情報を調べられるようになります。
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
```
|
|
7
|
+
例:
|
|
8
|
+
「株式会社エージェントの電話番号を教えて」
|
|
9
|
+
「富士フイルムBIの営業部署を一覧で出して」
|
|
10
|
+
「この会社の全情報を調べて、Excelに入れて」
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### 仕組み
|
|
7
14
|
|
|
8
15
|
```
|
|
9
|
-
[ユーザー] → [Claude] ←── MCP
|
|
16
|
+
[ユーザー] → [Claude] ←── MCP ──→ [本サーバー] ──→ [BizGate API]
|
|
10
17
|
```
|
|
11
18
|
|
|
12
|
-
|
|
13
|
-
2. Claude が MCP プロトコル経由で本サーバーのツールを呼び出す
|
|
14
|
-
3. 本サーバーが BizGate API に問い合わせ → JSON レスポンスを解析
|
|
15
|
-
4. 構造化された情報を Claude に返却
|
|
16
|
-
5. Claude がユーザーに自然言語で回答(スプレッドシートへの入力も可能)
|
|
19
|
+
---
|
|
17
20
|
|
|
18
|
-
##
|
|
21
|
+
## セットアップ(所要時間:約10分)
|
|
19
22
|
|
|
20
|
-
|
|
21
|
-
|---------|------|--------|
|
|
22
|
-
| `bizgate__company_search` | 企業の基本情報(住所・電話・代表者・業種・資本金 等) | 1回(結果なしでも課金) |
|
|
23
|
-
| `bizgate__department_search` | 部署情報(部署名・住所・電話番号)最大500件 | 1回(データなしは課金なし) |
|
|
24
|
-
| `bizgate__marketing_tags` | マーケティングタグ(SNS・MA・サービス・活動) | 1回(データなしは課金なし) |
|
|
25
|
-
| `bizgate__keyman_search` | 人事情報(部署・役職・発令日)最大500件 | 1回(データなしは課金なし) |
|
|
26
|
-
| `bizgate__company_full` | 企業+部署+人事を一括取得 | 3回 |
|
|
27
|
-
| `bizgate__usage_status` | 本日の残りAPI回数を確認 | 0回 |
|
|
23
|
+
### 事前に必要なもの
|
|
28
24
|
|
|
29
|
-
|
|
25
|
+
- **Claude Code** がパソコンにインストール済み
|
|
26
|
+
- **Node.js 18 以上** がインストール済み
|
|
27
|
+
- **BizGate のアカウント情報**(管理者から受け取ってください)
|
|
28
|
+
- ユーザー名
|
|
29
|
+
- パスワード
|
|
30
|
+
- サービスキー(企業用・部署用の2つ)
|
|
30
31
|
|
|
31
|
-
|
|
32
|
+
---
|
|
32
33
|
|
|
33
|
-
|
|
34
|
-
- Claude Code がインストール済み
|
|
35
|
-
- BizGate API のアカウント(ユーザー名・パスワード・サービスキー)
|
|
34
|
+
### ステップ 1:ターミナルを開く
|
|
36
35
|
|
|
37
|
-
|
|
36
|
+
Mac の場合:
|
|
37
|
+
1. `Command + Space` で Spotlight を開く
|
|
38
|
+
2. 「ターミナル」と入力して Enter
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
### ステップ 2:MCP サーバーを登録する
|
|
43
|
+
|
|
44
|
+
ターミナルに以下を **そのままコピーして貼り付け** → Enter を押してください。
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
claude mcp add --scope user bizgate -- npx bizgate-mcp-server
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
以下のように表示されれば OK です。
|
|
51
|
+
```
|
|
52
|
+
Added stdio MCP server bizgate...
|
|
44
53
|
```
|
|
45
54
|
|
|
46
|
-
|
|
55
|
+
---
|
|
47
56
|
|
|
48
|
-
|
|
57
|
+
### ステップ 3:設定ファイルを編集する
|
|
49
58
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
ターミナルに以下を **そのままコピーして貼り付け** → Enter を押してください。
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
open ~/.claude.json
|
|
54
63
|
```
|
|
55
64
|
|
|
56
|
-
|
|
65
|
+
テキストエディタで設定ファイルが開きます。
|
|
66
|
+
|
|
67
|
+
ファイルの中から `"bizgate"` というセクションを探してください。
|
|
68
|
+
以下のように **書き換え** ます。
|
|
69
|
+
|
|
70
|
+
#### 書き換え前
|
|
57
71
|
|
|
58
|
-
|
|
72
|
+
```json
|
|
73
|
+
"bizgate": {
|
|
74
|
+
"type": "stdio",
|
|
75
|
+
"command": "npx",
|
|
76
|
+
"args": ["bizgate-mcp-server"],
|
|
77
|
+
"env": {}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
59
80
|
|
|
60
|
-
|
|
81
|
+
#### 書き換え後
|
|
61
82
|
|
|
62
83
|
```json
|
|
63
|
-
{
|
|
64
|
-
"
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
"BIZGATE_SKEY_COMPANY": "企業APIのサービスキー",
|
|
75
|
-
"BIZGATE_SKEY_DEPARTMENT": "部署APIのサービスキー",
|
|
76
|
-
"BIZGATE_SKEY_MARKETING": "マーケAPIのサービスキー(任意)",
|
|
77
|
-
"BIZGATE_SKEY_KEYMAN": "キーマンAPIのサービスキー(任意)"
|
|
78
|
-
}
|
|
79
|
-
}
|
|
84
|
+
"bizgate": {
|
|
85
|
+
"type": "stdio",
|
|
86
|
+
"command": "npx",
|
|
87
|
+
"args": ["bizgate-mcp-server"],
|
|
88
|
+
"env": {
|
|
89
|
+
"BIZGATE_USERNAME": "ここにユーザー名を入力",
|
|
90
|
+
"BIZGATE_PASSWORD": "ここにパスワードを入力",
|
|
91
|
+
"BIZGATE_AUTH_MODE": "basic",
|
|
92
|
+
"BIZGATE_DAILY_LIMIT": "200",
|
|
93
|
+
"BIZGATE_SKEY_COMPANY": "ここに企業APIキーを入力",
|
|
94
|
+
"BIZGATE_SKEY_DEPARTMENT": "ここに部署APIキーを入力"
|
|
80
95
|
}
|
|
81
96
|
}
|
|
82
97
|
```
|
|
83
98
|
|
|
84
|
-
>
|
|
99
|
+
> **注意(よくあるミス)**
|
|
100
|
+
> - `ここに〇〇を入力` の部分を、管理者から受け取った **実際の値** に置き換えてください
|
|
101
|
+
> - ダブルクォーテーション `"` は **消さないで** ください
|
|
102
|
+
> - カンマ `,` の位置を **変えないで** ください
|
|
103
|
+
> - 最後の行(`"BIZGATE_SKEY_DEPARTMENT"` の行)の末尾には **カンマをつけないで** ください
|
|
104
|
+
> - 編集後、`Command + S` で保存 → ファイルを閉じる
|
|
85
105
|
|
|
86
|
-
|
|
106
|
+
---
|
|
87
107
|
|
|
88
|
-
|
|
108
|
+
### ステップ 4:Claude Code を再起動する
|
|
109
|
+
|
|
110
|
+
もし Claude Code が開いている場合は、一度閉じてください。
|
|
111
|
+
|
|
112
|
+
ターミナルで以下を実行してください。
|
|
113
|
+
|
|
114
|
+
```
|
|
89
115
|
claude
|
|
90
116
|
```
|
|
91
117
|
|
|
92
|
-
|
|
118
|
+
---
|
|
93
119
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
Claude Code で自然言語で聞くだけです。
|
|
120
|
+
### ステップ 5:接続を確認する
|
|
97
121
|
|
|
98
|
-
|
|
122
|
+
Claude Code が起動したら、以下を入力してください。
|
|
99
123
|
|
|
100
124
|
```
|
|
101
|
-
|
|
125
|
+
/mcp
|
|
126
|
+
```
|
|
102
127
|
|
|
103
|
-
|
|
128
|
+
一覧が表示されます。 `bizgate` の横に **✔ connected** と表示されていれば成功です。
|
|
104
129
|
|
|
105
|
-
|
|
106
|
-
```
|
|
130
|
+
うまくいかない場合は、このページの一番下の「うまくいかないとき」を確認してください。
|
|
107
131
|
|
|
108
|
-
|
|
132
|
+
---
|
|
109
133
|
|
|
110
|
-
|
|
111
|
-
富士フイルムBIの東京都にある人事部を調べて
|
|
134
|
+
## 使い方
|
|
112
135
|
|
|
113
|
-
|
|
114
|
-
```
|
|
136
|
+
設定完了後は、Claude に **日本語で話しかけるだけ** です。特別なコマンドは不要です。
|
|
115
137
|
|
|
116
|
-
###
|
|
138
|
+
### よく使うパターン
|
|
117
139
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
140
|
+
| やりたいこと | Claude への聞き方 |
|
|
141
|
+
|------------|-----------------|
|
|
142
|
+
| 会社の基本情報を知りたい | 「株式会社○○の企業情報を教えて」 |
|
|
143
|
+
| 電話番号を知りたい | 「○○の電話番号は?」 |
|
|
144
|
+
| 部署の一覧を見たい | 「○○の部署一覧を出して」 |
|
|
145
|
+
| 特定の部署を探したい | 「○○の人事部の連絡先を教えて」 |
|
|
146
|
+
| 全情報をまとめて見たい | 「○○の全情報を調べて」 |
|
|
147
|
+
| Excelに入力したい | 「○○の情報を調べてExcelに入れて」 |
|
|
122
148
|
|
|
123
|
-
###
|
|
149
|
+
### 注意点
|
|
124
150
|
|
|
125
|
-
|
|
126
|
-
|
|
151
|
+
- **会社名は正確に** 入力してください(例:「ソフバン」→ 「ソフトバンク株式会社」)
|
|
152
|
+
- 1日に使える回数は **200回** までです(残り回数は毎回表示されます)
|
|
153
|
+
- 企業検索は、結果が見つからなくても **1回分消費** されます
|
|
154
|
+
- 部署検索・人事検索は、データが見つからなかった場合は **消費されません**
|
|
127
155
|
|
|
128
|
-
|
|
129
|
-
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 提供ツール(参考情報)
|
|
159
|
+
|
|
160
|
+
通常はツール名を意識する必要はありません。Claude が自動で適切なツールを選びます。
|
|
161
|
+
|
|
162
|
+
| ツール名 | 説明 | API消費 |
|
|
163
|
+
|---------|------|--------|
|
|
164
|
+
| `bizgate__company_search` | 企業の基本情報(住所・電話・代表者・業種・資本金 等) | 1回 |
|
|
165
|
+
| `bizgate__department_search` | 部署情報(部署名・住所・電話番号)最大500件 | 1回 |
|
|
166
|
+
| `bizgate__marketing_tags` | マーケティングタグ(SNS・MA・サービス・活動) | 1回 |
|
|
167
|
+
| `bizgate__keyman_search` | 人事情報(部署・役職・発令日)最大500件 | 1回 |
|
|
168
|
+
| `bizgate__company_full` | 企業+部署+人事を一括取得 | 3回 |
|
|
169
|
+
| `bizgate__usage_status` | 本日の残りAPI回数を確認 | 0回 |
|
|
170
|
+
|
|
171
|
+
---
|
|
130
172
|
|
|
131
|
-
##
|
|
173
|
+
## 環境変数一覧(参考情報)
|
|
132
174
|
|
|
133
175
|
| 変数名 | 必須 | 説明 |
|
|
134
176
|
|-------|------|------|
|
|
135
|
-
| `BIZGATE_USERNAME` |
|
|
136
|
-
| `BIZGATE_PASSWORD` |
|
|
177
|
+
| `BIZGATE_USERNAME` | ○ | BizGate ユーザー名 |
|
|
178
|
+
| `BIZGATE_PASSWORD` | ○ | BizGate パスワード |
|
|
137
179
|
| `BIZGATE_AUTH_MODE` | | `basic`(デフォルト)または `ip` |
|
|
138
|
-
| `BIZGATE_APP` | ○(IP
|
|
180
|
+
| `BIZGATE_APP` | ○(IP認証時のみ) | アプリ識別子 |
|
|
139
181
|
| `BIZGATE_SKEY_COMPANY` | ○ | 企業APIのサービスキー |
|
|
140
182
|
| `BIZGATE_SKEY_DEPARTMENT` | ○ | 部署APIのサービスキー |
|
|
141
183
|
| `BIZGATE_SKEY_MARKETING` | | マーケティングタグAPIのサービスキー |
|
|
142
184
|
| `BIZGATE_SKEY_KEYMAN` | | キーマンAPIのサービスキー |
|
|
143
185
|
| `BIZGATE_DAILY_LIMIT` | | 1日のAPI上限(デフォルト: 200) |
|
|
144
|
-
| `BIZGATE_BASE_URL` | | APIエンドポイント(通常変更不要) |
|
|
145
186
|
|
|
146
|
-
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## うまくいかないとき
|
|
190
|
+
|
|
191
|
+
### `/mcp` で `bizgate` が `failed` になっている
|
|
192
|
+
|
|
193
|
+
ステップ 3 の設定ファイルに入力ミスがある可能性が高いです。以下を確認してください。
|
|
194
|
+
|
|
195
|
+
- ダブルクォーテーション `"` が抜けていないか
|
|
196
|
+
- カンマ `,` が余分についていないか(特に **最後の行の末尾**)
|
|
197
|
+
- ユーザー名・パスワード・サービスキーが正しいか
|
|
198
|
+
|
|
199
|
+
確認しても直らない場合は、管理者に `~/.claude.json` の中身を見せて相談してください。
|
|
200
|
+
|
|
201
|
+
### 「サービスキーが無効です」と表示される
|
|
202
|
+
|
|
203
|
+
サービスキーが間違っている、または有効期限切れです。管理者に確認してください。
|
|
204
|
+
|
|
205
|
+
### 「1日のリクエスト上限に達しました」と表示される
|
|
206
|
+
|
|
207
|
+
本日の利用回数(200回)を使い切りました。翌日にリセットされます。
|
|
208
|
+
|
|
209
|
+
### 「該当する企業が見つかりませんでした」と表示される
|
|
210
|
+
|
|
211
|
+
会社名を **正式名称** で入力してみてください。
|
|
212
|
+
- 悪い例:「トヨタ」
|
|
213
|
+
- 良い例:「トヨタ自動車株式会社」
|
|
214
|
+
|
|
215
|
+
法人番号がわかる場合は、そちらでも検索できます。
|
|
147
216
|
|
|
148
|
-
|
|
149
|
-
- **部署・マーケ・キーマンはデータなしなら課金なし**です
|
|
150
|
-
- 1日のAPI上限はエンリッチメントパイプラインと共有です(全体900回中、MCP用に200回を確保)
|
|
151
|
-
- すべてのレスポンスに残りAPI回数が表示されます
|
|
217
|
+
### 「複数の企業が存在します」と表示される
|
|
152
218
|
|
|
153
|
-
|
|
219
|
+
検索条件が曖昧で、複数の企業がヒットしています。
|
|
220
|
+
会社名をより正確に入力するか、メールアドレスやホームページURLを追加で伝えてください。
|
|
154
221
|
|
|
155
|
-
| 症状 | 原因 | 対処法 |
|
|
156
|
-
|------|------|--------|
|
|
157
|
-
| `/mcp` で `failed` | 環境変数の設定ミス | `~/.claude.json` の env を確認 |
|
|
158
|
-
| エラーコード 102 | サービスキーが無効 | 管理者に有効なサービスキーを確認 |
|
|
159
|
-
| エラーコード 112 | 1日の上限超過 | 翌日まで待つ、または上限を確認 |
|
|
160
|
-
| エラーコード 204 | 企業が見つからない | 正式名称(株式会社○○)で再検索 |
|
|
161
|
-
| エラーコード 205 | 複数企業がマッチ | 法人番号やメールアドレスを追加で指定 |
|
package/dist/bizgate-client.d.ts
CHANGED
|
@@ -65,4 +65,29 @@ export declare class BizGateClient {
|
|
|
65
65
|
docs: BizGateDoc[];
|
|
66
66
|
numFound: number;
|
|
67
67
|
}>;
|
|
68
|
+
/**
|
|
69
|
+
* Keyman with name lookup (キーマン・人名あり).
|
|
70
|
+
* Two-step flow: uses IDs from searchKeyman() to get person names.
|
|
71
|
+
* Not billed on failure.
|
|
72
|
+
*/
|
|
73
|
+
getKeymanDetails(keymanIDs: string[]): Promise<{
|
|
74
|
+
docs: BizGateDoc[];
|
|
75
|
+
}>;
|
|
76
|
+
/**
|
|
77
|
+
* Full keyman search with names (2-step).
|
|
78
|
+
* Step 1: searchKeyman() to get IDs
|
|
79
|
+
* Step 2: getKeymanDetails() to get names for each ID
|
|
80
|
+
*/
|
|
81
|
+
searchKeymanWithNames(params: {
|
|
82
|
+
shogo?: string;
|
|
83
|
+
compno?: string;
|
|
84
|
+
pList?: string;
|
|
85
|
+
cList?: string;
|
|
86
|
+
bKwd?: string;
|
|
87
|
+
bKOpr?: string;
|
|
88
|
+
limit?: number;
|
|
89
|
+
}): Promise<{
|
|
90
|
+
docs: BizGateDoc[];
|
|
91
|
+
totalFound: number;
|
|
92
|
+
}>;
|
|
68
93
|
}
|
package/dist/bizgate-client.js
CHANGED
|
@@ -137,4 +137,49 @@ export class BizGateClient {
|
|
|
137
137
|
numFound: result.response?.numFound ?? 0,
|
|
138
138
|
};
|
|
139
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Keyman with name lookup (キーマン・人名あり).
|
|
142
|
+
* Two-step flow: uses IDs from searchKeyman() to get person names.
|
|
143
|
+
* Not billed on failure.
|
|
144
|
+
*/
|
|
145
|
+
async getKeymanDetails(keymanIDs) {
|
|
146
|
+
const allDocs = [];
|
|
147
|
+
for (const id of keymanIDs) {
|
|
148
|
+
this.usageTracker.increment();
|
|
149
|
+
const result = await this.request(this.config.skeyKeymanName, {
|
|
150
|
+
keymanID: id,
|
|
151
|
+
});
|
|
152
|
+
if (result.response?.docs) {
|
|
153
|
+
allDocs.push(...result.response.docs);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return { docs: allDocs };
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Full keyman search with names (2-step).
|
|
160
|
+
* Step 1: searchKeyman() to get IDs
|
|
161
|
+
* Step 2: getKeymanDetails() to get names for each ID
|
|
162
|
+
*/
|
|
163
|
+
async searchKeymanWithNames(params) {
|
|
164
|
+
// Step 1: Get IDs
|
|
165
|
+
const { docs: keymanDocs, numFound } = await this.searchKeyman({
|
|
166
|
+
shogo: params.shogo,
|
|
167
|
+
compno: params.compno,
|
|
168
|
+
pList: params.pList,
|
|
169
|
+
cList: params.cList,
|
|
170
|
+
bKwd: params.bKwd,
|
|
171
|
+
bKOpr: params.bKOpr,
|
|
172
|
+
});
|
|
173
|
+
if (keymanDocs.length === 0) {
|
|
174
|
+
return { docs: [], totalFound: 0 };
|
|
175
|
+
}
|
|
176
|
+
// Step 2: Get details with names (limit to avoid excessive API calls)
|
|
177
|
+
const maxDetails = params.limit ?? 10;
|
|
178
|
+
const ids = keymanDocs
|
|
179
|
+
.slice(0, maxDetails)
|
|
180
|
+
.map((d) => d.id)
|
|
181
|
+
.filter((id) => !!id);
|
|
182
|
+
const { docs: detailDocs } = await this.getKeymanDetails(ids);
|
|
183
|
+
return { docs: detailDocs, totalFound: numFound };
|
|
184
|
+
}
|
|
140
185
|
}
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,7 @@ const skeyCompany = process.env.BIZGATE_SKEY_COMPANY;
|
|
|
12
12
|
const skeyDepartment = process.env.BIZGATE_SKEY_DEPARTMENT;
|
|
13
13
|
const skeyMarketing = process.env.BIZGATE_SKEY_MARKETING ?? "";
|
|
14
14
|
const skeyKeyman = process.env.BIZGATE_SKEY_KEYMAN ?? "";
|
|
15
|
+
const skeyKeymanName = process.env.BIZGATE_SKEY_KEYMAN_NAME ?? "";
|
|
15
16
|
if (!skeyCompany || !skeyDepartment) {
|
|
16
17
|
console.error("Error: BIZGATE_SKEY_COMPANY and BIZGATE_SKEY_DEPARTMENT environment variables are required");
|
|
17
18
|
process.exit(1);
|
|
@@ -39,6 +40,7 @@ const config = {
|
|
|
39
40
|
skeyDepartment,
|
|
40
41
|
skeyMarketing,
|
|
41
42
|
skeyKeyman,
|
|
43
|
+
skeyKeymanName,
|
|
42
44
|
authMode,
|
|
43
45
|
username: process.env.BIZGATE_USERNAME,
|
|
44
46
|
password: process.env.BIZGATE_PASSWORD,
|
|
@@ -247,14 +249,21 @@ server.tool("bizgate__marketing_tags", "会社名または法人番号で企業
|
|
|
247
249
|
const lines = [`## マーケティングタグ: ${f(doc.shogo)}`];
|
|
248
250
|
if (doc.compno)
|
|
249
251
|
lines.push(`法人番号: ${doc.compno}`);
|
|
252
|
+
const formatTags = (raw) => {
|
|
253
|
+
return raw
|
|
254
|
+
.split("/")
|
|
255
|
+
.filter((t) => t.trim())
|
|
256
|
+
.map((t) => `- ${t.trim()}`)
|
|
257
|
+
.join("\n");
|
|
258
|
+
};
|
|
250
259
|
if (doc.snstag)
|
|
251
|
-
lines.push(`\n### SNSタグ\n${doc.snstag
|
|
260
|
+
lines.push(`\n### SNSタグ\n${formatTags(doc.snstag)}`);
|
|
252
261
|
if (doc.matag)
|
|
253
|
-
lines.push(`\n### MAツール\n${doc.matag
|
|
262
|
+
lines.push(`\n### MAツール\n${formatTags(doc.matag)}`);
|
|
254
263
|
if (doc.servicetag)
|
|
255
|
-
lines.push(`\n### 事業サービス\n${doc.servicetag
|
|
264
|
+
lines.push(`\n### 事業サービス\n${formatTags(doc.servicetag)}`);
|
|
256
265
|
if (doc.activtag)
|
|
257
|
-
lines.push(`\n### 活動タグ\n${doc.activtag
|
|
266
|
+
lines.push(`\n### 活動タグ\n${formatTags(doc.activtag)}`);
|
|
258
267
|
return {
|
|
259
268
|
content: [{ type: "text", text: lines.join("\n") + usageFooter() }],
|
|
260
269
|
};
|
|
@@ -263,26 +272,28 @@ server.tool("bizgate__marketing_tags", "会社名または法人番号で企業
|
|
|
263
272
|
return { content: [{ type: "text", text: errorText(e) }] };
|
|
264
273
|
}
|
|
265
274
|
});
|
|
266
|
-
// ---------- Tool 4:
|
|
267
|
-
server.tool("bizgate__keyman_search", "
|
|
275
|
+
// ---------- Tool 4: キーマン検索(人名付き) ----------
|
|
276
|
+
server.tool("bizgate__keyman_search", "会社名または法人番号で人事情報(担当者名・部署・役職・電話番号・住所)を検索する。部署カテゴリやキーワードで絞り込み可能。デフォルトで上位10名の詳細を取得(limitで変更可能)。API消費: 1回(一覧取得)+ N回(詳細取得、Nはlimit数)。", {
|
|
268
277
|
shogo: z.string().optional().describe("会社名(例:株式会社○○)"),
|
|
269
278
|
compno: z.string().optional().describe("法人番号(13桁)"),
|
|
270
279
|
pList: z.string().optional().describe("都道府県コード(カンマ区切り)"),
|
|
271
280
|
cList: z.string().optional().describe("部署カテゴリ番号(カンマ区切り。3=人事,13=営業 など)"),
|
|
272
|
-
bKwd: z.string().optional().describe("部署・役職キーワード(カンマ区切り。例:
|
|
281
|
+
bKwd: z.string().optional().describe("部署・役職キーワード(カンマ区切り。例: 役員,部長,営業)"),
|
|
273
282
|
bKOpr: z.string().optional().describe("キーワード結合演算子(0=OR(デフォルト), 1=AND)"),
|
|
274
|
-
|
|
283
|
+
limit: z.number().optional().describe("詳細取得する人数の上限(デフォルト: 10、最大: 50)。API消費に注意。"),
|
|
284
|
+
}, async ({ shogo, compno, pList, cList, bKwd, bKOpr, limit }) => {
|
|
275
285
|
const err = validateInput(shogo, compno);
|
|
276
286
|
if (err)
|
|
277
287
|
return { content: [{ type: "text", text: err }] };
|
|
278
|
-
if (!skeyKeyman) {
|
|
288
|
+
if (!skeyKeyman || !skeyKeymanName) {
|
|
279
289
|
return {
|
|
280
|
-
content: [{ type: "text", text: "エラー: BIZGATE_SKEY_KEYMAN が設定されていません。" }],
|
|
290
|
+
content: [{ type: "text", text: "エラー: BIZGATE_SKEY_KEYMAN および BIZGATE_SKEY_KEYMAN_NAME が設定されていません。" }],
|
|
281
291
|
};
|
|
282
292
|
}
|
|
293
|
+
const maxLimit = Math.min(limit ?? 10, 50);
|
|
283
294
|
try {
|
|
284
|
-
const { docs,
|
|
285
|
-
shogo, compno, pList, cList, bKwd, bKOpr,
|
|
295
|
+
const { docs, totalFound } = await client.searchKeymanWithNames({
|
|
296
|
+
shogo, compno, pList, cList, bKwd, bKOpr, limit: maxLimit,
|
|
286
297
|
});
|
|
287
298
|
if (docs.length === 0) {
|
|
288
299
|
return {
|
|
@@ -290,8 +301,24 @@ server.tool("bizgate__keyman_search", "会社名または法人番号で人事
|
|
|
290
301
|
};
|
|
291
302
|
}
|
|
292
303
|
const companyName = f(docs[0].shogo);
|
|
293
|
-
const header = `## 人事情報${companyName ? `: ${companyName}` : ""}(全${
|
|
294
|
-
const text = docs
|
|
304
|
+
const header = `## 人事情報${companyName ? `: ${companyName}` : ""}(全${totalFound}件中、上位${docs.length}件の詳細)\n`;
|
|
305
|
+
const text = docs
|
|
306
|
+
.map((d, i) => {
|
|
307
|
+
const lines = [`${i + 1}. ${f(d.ceo) || "(氏名不明)"}`];
|
|
308
|
+
lines.push(` 役職: ${f(d.bumon) || "(不明)"}`);
|
|
309
|
+
if (f(d.tel))
|
|
310
|
+
lines.push(` 電話: ${f(d.tel)}`);
|
|
311
|
+
if (f(d.add))
|
|
312
|
+
lines.push(` 住所: ${f(d.add)}`);
|
|
313
|
+
if (d.haturei)
|
|
314
|
+
lines.push(` 発令日: ${d.haturei}`);
|
|
315
|
+
if (d.pagedate)
|
|
316
|
+
lines.push(` 発表日: ${d.pagedate}`);
|
|
317
|
+
if (d.bikou)
|
|
318
|
+
lines.push(` 備考: ${d.bikou}`);
|
|
319
|
+
return lines.join("\n");
|
|
320
|
+
})
|
|
321
|
+
.join("\n\n");
|
|
295
322
|
return {
|
|
296
323
|
content: [{ type: "text", text: header + text + usageFooter() }],
|
|
297
324
|
};
|
package/dist/types.d.ts
CHANGED