apick-mcp 3.2.1 → 3.2.2
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/CHANGELOG.md +7 -1
- package/TOOLS.md +7 -3
- package/package.json +1 -1
- package/src/index.js +92 -92
package/CHANGELOG.md
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
# 변경 기록
|
|
1
|
+
# 변경 기록
|
|
2
|
+
|
|
3
|
+
## 3.2.2 - 2026-09-14
|
|
4
|
+
|
|
5
|
+
- 운전면허 `ghost_num`의 생략·빈값·임의 문자열 허용과 판정 미사용 계약을 한영 문서에 명시했습니다.
|
|
6
|
+
- 운전면허 불일치와 무과금 처리 실패를 구분하고, 응답에 조회 페이지 HTML을 포함하지 않는 계약을 안내합니다.
|
|
7
|
+
- Clarify optional driver-license serial input, match semantics, safe messages, and uncharged processing failures.
|
|
2
8
|
|
|
3
9
|
## 3.2.1 - 2026-09-14
|
|
4
10
|
|
package/TOOLS.md
CHANGED
|
@@ -434,9 +434,13 @@ Verify the authenticity of a Korean resident registration card (jumin-deungnokje
|
|
|
434
434
|
|
|
435
435
|
### `identi_card2` — [Text] 운전면허증 진위 확인
|
|
436
436
|
|
|
437
|
-
|
|
437
|
+
Check Korean driver license number and personal details. `ghost_num` is optional: omit it, send an empty string, or send any string. Its content is not used in the match decision. This tool does not verify the serial number itself or the physical document's authenticity.
|
|
438
438
|
|
|
439
|
-
|
|
439
|
+
운전면허번호와 인적사항의 일치 여부를 조회합니다. birth_y, birth_m, birth_d, name과 면허번호 4구획(licen_no0~licen_no3)은 필수입니다. ghost_num(식별번호)은 생략·빈값·임의 문자열 모두 허용하며 전달값은 판정에 사용하지 않습니다. rrn1, rrn2도 선택 입력입니다. 암호일련번호 자체나 실물 면허증의 위·변조 여부는 검증하지 않습니다. 정보주체의 동의 등 적법한 처리 근거를 확보한 경우에만 사용하십시오.
|
|
440
|
+
|
|
441
|
+
`result=0` means a mismatch and `result=1` means a match. An unconfirmed result returns HTTP 424 (`result=2`); a timeout returns HTTP 408 (`result=3`). These processing failures are not charged. Responses contain short public messages, never source-page HTML.
|
|
442
|
+
|
|
443
|
+
`result=0`은 불일치, `result=1`은 일치입니다. 판정 확인 실패는 HTTP 424(`result=2`), 시간 초과는 HTTP 408(`result=3`)이며 과금되지 않습니다. 응답에는 짧은 안내 문구만 포함되고 조회 페이지 HTML은 포함되지 않습니다.
|
|
440
444
|
|
|
441
445
|
> 읽기 전용 / read-only · 외부 데이터 조회 / external lookup · server `identity`
|
|
442
446
|
|
|
@@ -450,7 +454,7 @@ Verify the authenticity of a Korean driver license using text input.
|
|
|
450
454
|
| `licen_no1` | `string` | **필수 / required** | 면허번호 2구획 (예: 19) |
|
|
451
455
|
| `licen_no2` | `string` | **필수 / required** | 면허번호 3구획 (예: 174133) |
|
|
452
456
|
| `licen_no3` | `string` | **필수 / required** | 면허번호 4구획 (예: 01) |
|
|
453
|
-
| `ghost_num` | `string` | 선택 / optional |
|
|
457
|
+
| `ghost_num` | `string` | 선택 / optional | 생략·빈값 허용, 전달값은 판정에 사용하지 않음 / May be omitted or empty; not used in the match decision |
|
|
454
458
|
| `rrn1` | `string` | 선택 / optional | 주민등록번호 앞 6자리 (선택) |
|
|
455
459
|
| `rrn2` | `string` | 선택 / optional | 주민등록번호 뒤 7자리 (선택) |
|
|
456
460
|
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -1,92 +1,92 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// apick-mcp - run the APICK MCP server over stdio.
|
|
3
|
-
//
|
|
4
|
-
// Usage:
|
|
5
|
-
// apick-mcp [--server <name>]
|
|
6
|
-
//
|
|
7
|
-
// Environment:
|
|
8
|
-
// APICK_API_KEY APICK license key. Optional: tools/list works without one,
|
|
9
|
-
// tools/call needs it.
|
|
10
|
-
// APICK_MCP_SERVER Which server to expose (default: all).
|
|
11
|
-
// APICK_MCP_URL Base URL override (default: https://apick.app/mcp).
|
|
12
|
-
|
|
13
|
-
import { readFileSync } from 'node:fs';
|
|
14
|
-
import { fileURLToPath } from 'node:url';
|
|
15
|
-
import { createBridge, DEFAULT_ENDPOINT, SERVERS } from './bridge.js';
|
|
16
|
-
|
|
17
|
-
const HELP = `apick-mcp - APICK MCP server over stdio
|
|
18
|
-
|
|
19
|
-
apick-mcp [--server <name>]
|
|
20
|
-
|
|
21
|
-
Options
|
|
22
|
-
--server, -s <name> ${SERVERS.join(', ')} (default: all)
|
|
23
|
-
--version, -v print version
|
|
24
|
-
--help, -h print this message
|
|
25
|
-
|
|
26
|
-
Environment
|
|
27
|
-
APICK_API_KEY APICK license key (get one at https://apick.app)
|
|
28
|
-
APICK_MCP_SERVER same as --server
|
|
29
|
-
APICK_MCP_URL base URL override (default: ${DEFAULT_ENDPOINT})
|
|
30
|
-
|
|
31
|
-
Clients that support remote MCP can skip this bridge and connect straight to
|
|
32
|
-
${DEFAULT_ENDPOINT}/all with an Authorization: Bearer header.
|
|
33
|
-
Docs: https://apick.app/dev_guide/mcp
|
|
34
|
-
`;
|
|
35
|
-
|
|
36
|
-
function parseArgs(argv) {
|
|
37
|
-
const args = { server: process.env.APICK_MCP_SERVER || 'all' };
|
|
38
|
-
for (let i = 0; i < argv.length; i++) {
|
|
39
|
-
const arg = argv[i];
|
|
40
|
-
if (arg === '--help' || arg === '-h') args.help = true;
|
|
41
|
-
else if (arg === '--version' || arg === '-v') args.version = true;
|
|
42
|
-
else if (arg === '--server' || arg === '-s') args.server = argv[++i];
|
|
43
|
-
else if (arg.startsWith('--server=')) args.server = arg.slice('--server='.length);
|
|
44
|
-
else args.unknown = arg;
|
|
45
|
-
}
|
|
46
|
-
return args;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
async function main() {
|
|
50
|
-
const args = parseArgs(process.argv.slice(2));
|
|
51
|
-
|
|
52
|
-
if (args.help) {
|
|
53
|
-
process.stdout.write(HELP);
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
if (args.version) {
|
|
57
|
-
const pkgPath = fileURLToPath(new URL('../package.json', import.meta.url));
|
|
58
|
-
process.stdout.write(JSON.parse(readFileSync(pkgPath, 'utf8')).version + '\n');
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
if (args.unknown) {
|
|
62
|
-
process.stderr.write('apick-mcp: unknown argument ' + args.unknown + '\n\n' + HELP);
|
|
63
|
-
process.exitCode = 2;
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
if (!SERVERS.includes(args.server)) {
|
|
67
|
-
process.stderr.write(
|
|
68
|
-
'apick-mcp: unknown server "' + args.server + '". Available: ' + SERVERS.join(', ') + '\n'
|
|
69
|
-
);
|
|
70
|
-
process.exitCode = 2;
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const bridge = createBridge({
|
|
75
|
-
server: args.server,
|
|
76
|
-
apiKey: process.env.APICK_API_KEY,
|
|
77
|
-
endpoint: process.env.APICK_MCP_URL
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
if (!process.env.APICK_API_KEY) {
|
|
81
|
-
process.stderr.write(
|
|
82
|
-
'apick-mcp: no APICK_API_KEY set - tool discovery works, tool calls will ask you to sign in at https://apick.app\n'
|
|
83
|
-
);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
await bridge.attach(process.stdin);
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
main().catch((err) => {
|
|
90
|
-
process.stderr.write('apick-mcp: ' + err.message + '\n');
|
|
91
|
-
process.exitCode = 1;
|
|
92
|
-
});
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// apick-mcp - run the APICK MCP server over stdio.
|
|
3
|
+
//
|
|
4
|
+
// Usage:
|
|
5
|
+
// apick-mcp [--server <name>]
|
|
6
|
+
//
|
|
7
|
+
// Environment:
|
|
8
|
+
// APICK_API_KEY APICK license key. Optional: tools/list works without one,
|
|
9
|
+
// tools/call needs it.
|
|
10
|
+
// APICK_MCP_SERVER Which server to expose (default: all).
|
|
11
|
+
// APICK_MCP_URL Base URL override (default: https://apick.app/mcp).
|
|
12
|
+
|
|
13
|
+
import { readFileSync } from 'node:fs';
|
|
14
|
+
import { fileURLToPath } from 'node:url';
|
|
15
|
+
import { createBridge, DEFAULT_ENDPOINT, SERVERS } from './bridge.js';
|
|
16
|
+
|
|
17
|
+
const HELP = `apick-mcp - APICK MCP server over stdio
|
|
18
|
+
|
|
19
|
+
apick-mcp [--server <name>]
|
|
20
|
+
|
|
21
|
+
Options
|
|
22
|
+
--server, -s <name> ${SERVERS.join(', ')} (default: all)
|
|
23
|
+
--version, -v print version
|
|
24
|
+
--help, -h print this message
|
|
25
|
+
|
|
26
|
+
Environment
|
|
27
|
+
APICK_API_KEY APICK license key (get one at https://apick.app)
|
|
28
|
+
APICK_MCP_SERVER same as --server
|
|
29
|
+
APICK_MCP_URL base URL override (default: ${DEFAULT_ENDPOINT})
|
|
30
|
+
|
|
31
|
+
Clients that support remote MCP can skip this bridge and connect straight to
|
|
32
|
+
${DEFAULT_ENDPOINT}/all with an Authorization: Bearer header.
|
|
33
|
+
Docs: https://apick.app/dev_guide/mcp
|
|
34
|
+
`;
|
|
35
|
+
|
|
36
|
+
function parseArgs(argv) {
|
|
37
|
+
const args = { server: process.env.APICK_MCP_SERVER || 'all' };
|
|
38
|
+
for (let i = 0; i < argv.length; i++) {
|
|
39
|
+
const arg = argv[i];
|
|
40
|
+
if (arg === '--help' || arg === '-h') args.help = true;
|
|
41
|
+
else if (arg === '--version' || arg === '-v') args.version = true;
|
|
42
|
+
else if (arg === '--server' || arg === '-s') args.server = argv[++i];
|
|
43
|
+
else if (arg.startsWith('--server=')) args.server = arg.slice('--server='.length);
|
|
44
|
+
else args.unknown = arg;
|
|
45
|
+
}
|
|
46
|
+
return args;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async function main() {
|
|
50
|
+
const args = parseArgs(process.argv.slice(2));
|
|
51
|
+
|
|
52
|
+
if (args.help) {
|
|
53
|
+
process.stdout.write(HELP);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (args.version) {
|
|
57
|
+
const pkgPath = fileURLToPath(new URL('../package.json', import.meta.url));
|
|
58
|
+
process.stdout.write(JSON.parse(readFileSync(pkgPath, 'utf8')).version + '\n');
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (args.unknown) {
|
|
62
|
+
process.stderr.write('apick-mcp: unknown argument ' + args.unknown + '\n\n' + HELP);
|
|
63
|
+
process.exitCode = 2;
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
if (!SERVERS.includes(args.server)) {
|
|
67
|
+
process.stderr.write(
|
|
68
|
+
'apick-mcp: unknown server "' + args.server + '". Available: ' + SERVERS.join(', ') + '\n'
|
|
69
|
+
);
|
|
70
|
+
process.exitCode = 2;
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const bridge = createBridge({
|
|
75
|
+
server: args.server,
|
|
76
|
+
apiKey: process.env.APICK_API_KEY,
|
|
77
|
+
endpoint: process.env.APICK_MCP_URL
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
if (!process.env.APICK_API_KEY) {
|
|
81
|
+
process.stderr.write(
|
|
82
|
+
'apick-mcp: no APICK_API_KEY set - tool discovery works, tool calls will ask you to sign in at https://apick.app\n'
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
await bridge.attach(process.stdin);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
main().catch((err) => {
|
|
90
|
+
process.stderr.write('apick-mcp: ' + err.message + '\n');
|
|
91
|
+
process.exitCode = 1;
|
|
92
|
+
});
|