apick-mcp 3.2.0 → 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 CHANGED
@@ -1,4 +1,15 @@
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.
8
+
9
+ ## 3.2.1 - 2026-09-14
10
+
11
+ - Seedance 영상 생성 요금을 해상도별로 세분화(480p 560P·720p 1,250P·1080p 2,810P)하고 1080p 해상도를 지원합니다.
12
+ - Kling 영상 생성 요금을 std 410P·pro 550P로 갱신했습니다.
2
13
 
3
14
  ## 3.2.0 - 2026-09-14
4
15
 
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
- Verify the authenticity of a Korean driver license using text input.
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
- 운전면허증의 기재 정보를 입력해 진위 여부를 확인합니다. birth_y, birth_m, birth_d, name과 면허번호 4구획(licen_no0~licen_no3)은 모두 필수이며, ghost_num(식별번호)과 rrn1, rrn2는 선택 입력입니다. 정보주체의 동의 등 적법한 처리 근거를 확보한 경우에만 사용하십시오.
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 | 식별번호 (면허증 우측 표기, 예: 8H1X3Y) |
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
 
@@ -1841,7 +1845,7 @@ Polish a text (up to 100,000 characters) by fixing grammar, spelling, and awkwar
1841
1845
 
1842
1846
  Submit an asynchronous Seedance video generation job combining text, image, or reference inputs into up to a 30-second video.
1843
1847
 
1844
- Seedance 영상 생성 작업을 비동기로 접수합니다. text/image/reference 세 가지 mode를 지원하며, `seedance_jobs_status` Tool로 상태를 조회하고 완료되면 응답의 `result_url`(REST 다운로드 주소, 7일 이내 유효)로 다운로드합니다. 접수 시 `duration × 초당 610포인트`가 예약 차감되고 완료 시 확정, 실패·시간 초과 시 전액 환불됩니다.
1848
+ Seedance 영상 생성 작업을 비동기로 접수합니다. text/image/reference 세 가지 mode를 지원하며, `seedance_jobs_status` Tool로 상태를 조회하고 완료되면 응답의 `result_url`(REST 다운로드 주소, 7일 이내 유효)로 다운로드합니다. 접수 시 `duration × 초당 포인트`(해상도별 단가는 요금 절 참고)가 예약 차감되고 완료 시 확정, 실패·시간 초과 시 전액 환불됩니다.
1845
1849
 
1846
1850
  > **부작용 있음 / has side effects** · 외부 데이터 조회 / external lookup · server `ai`
1847
1851
 
@@ -1851,7 +1855,7 @@ Seedance 영상 생성 작업을 비동기로 접수합니다. text/image/refere
1851
1855
  | `mode` | `string` | 선택 / optional | 입력 방식 — 'text'(텍스트만) \| 'image'(첫 프레임 이미지 지정) \| 'reference'(참조 이미지·영상으로 주체 지정). 기본 text |
1852
1856
  | `duration` | `integer` | 선택 / optional | 영상 길이(초), 4~30, 기본 5 |
1853
1857
  | `aspect_ratio` | `string` | 선택 / optional | 가로세로 비율 — `16:9`, `4:3`, `1:1`, `3:4`, `9:16`, `21:9`, `adaptive` 중 하나, 기본 16:9 |
1854
- | `resolution` | `string` | 선택 / optional | 해상도 — `480p`, `720p` 중 하나, 기본 720p |
1858
+ | `resolution` | `string` | 선택 / optional | 해상도 — `480p`, `720p`, `1080p` 중 하나, 기본 720p. 해상도별로 초당 포인트가 다릅니다(요금 절 참고, 높을수록 비용 증가) |
1855
1859
  | `audio` | `boolean` | 선택 / optional | 오디오 생성 여부, 기본 true. 생성된 오디오가 정책(저작권 등) 검수에서 거부되면 작업이 실패하고 전액 환불됩니다 |
1856
1860
  | `idempotency_key` | `string` | 선택 / optional | 같은 요청의 재전송으로 인한 중복 접수·과금을 막는 고유 키 |
1857
1861
  | `image_url` | `string` (file) | 선택 / optional | image 모드에서 사용할 첫 프레임 이미지 URL — https URL, image/png, image/jpeg, image/webp, 최대 50MB |
@@ -1998,13 +2002,15 @@ Current rates 단가표: <https://apick.app/dev_guide/mcp> · Sign up for 1,000
1998
2002
  Video generation is billed per second of output (`duration × per-second points`), not per call — the rate above is per second, not per video.
1999
2003
  영상 생성은 호출당이 아니라 초당 과금입니다(`duration × 초당 포인트`) — 아래 단가는 1초당 포인트입니다.
2000
2004
 
2001
- | Model 모델 | Tier 등급 | Points/sec 초당 포인트 |
2005
+ | Model 모델 | Tier·Resolution 등급·해상도 | Points/sec 초당 포인트 |
2002
2006
  | --- | --- | --- |
2003
- | Seedance | standard | 610P |
2007
+ | Seedance | standard · 480p | 560P |
2008
+ | Seedance | standard · 720p | 1,250P |
2009
+ | Seedance | standard · 1080p | 2,810P |
2004
2010
  | Veo | standard | 900P |
2005
2011
  | Veo | fast | 360P |
2006
- | Kling | std | 320P |
2007
- | Kling | pro | 430P |
2012
+ | Kling | std | 410P |
2013
+ | Kling | pro | 550P |
2008
2014
 
2009
2015
  ## TTS quality and recovery / TTS 검수와 재개
2010
2016
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "apick-mcp",
3
- "version": "3.2.0",
3
+ "version": "3.2.2",
4
4
  "description": "APICK MCP — 97 Korean data, AI, image & video tools for AI agents. 사업자조회·신분증·OCR·배송조회·이미지 생성·편집·영상 생성·파일변환·검색·LLM.",
5
5
  "type": "module",
6
6
  "license": "MIT",
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
+ });