@apify/mcpc 0.1.3 → 0.1.5

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 (122) hide show
  1. package/.claude/settings.local.json +53 -1
  2. package/.idea/codeStyles/Project.xml +7 -0
  3. package/.idea/workspace.xml +314 -280
  4. package/CONTRIBUTING.md +210 -0
  5. package/README.md +690 -763
  6. package/dist/bridge/index.js +82 -18
  7. package/dist/bridge/index.js.map +1 -1
  8. package/dist/bridge/proxy-server.d.ts +21 -0
  9. package/dist/bridge/proxy-server.d.ts.map +1 -0
  10. package/dist/bridge/proxy-server.js +160 -0
  11. package/dist/bridge/proxy-server.js.map +1 -0
  12. package/dist/cli/commands/auth.d.ts.map +1 -1
  13. package/dist/cli/commands/auth.js +9 -4
  14. package/dist/cli/commands/auth.js.map +1 -1
  15. package/dist/cli/commands/clean.d.ts.map +1 -1
  16. package/dist/cli/commands/clean.js +21 -27
  17. package/dist/cli/commands/clean.js.map +1 -1
  18. package/dist/cli/commands/logging.js +1 -1
  19. package/dist/cli/commands/logging.js.map +1 -1
  20. package/dist/cli/commands/prompts.d.ts.map +1 -1
  21. package/dist/cli/commands/prompts.js +37 -5
  22. package/dist/cli/commands/prompts.js.map +1 -1
  23. package/dist/cli/commands/resources.js +5 -5
  24. package/dist/cli/commands/resources.js.map +1 -1
  25. package/dist/cli/commands/sessions.d.ts +7 -1
  26. package/dist/cli/commands/sessions.d.ts.map +1 -1
  27. package/dist/cli/commands/sessions.js +130 -189
  28. package/dist/cli/commands/sessions.js.map +1 -1
  29. package/dist/cli/commands/tools.d.ts +0 -1
  30. package/dist/cli/commands/tools.d.ts.map +1 -1
  31. package/dist/cli/commands/tools.js +48 -10
  32. package/dist/cli/commands/tools.js.map +1 -1
  33. package/dist/cli/commands/utilities.js +1 -1
  34. package/dist/cli/commands/utilities.js.map +1 -1
  35. package/dist/cli/helpers.d.ts +9 -4
  36. package/dist/cli/helpers.d.ts.map +1 -1
  37. package/dist/cli/helpers.js +62 -81
  38. package/dist/cli/helpers.js.map +1 -1
  39. package/dist/cli/index.js +104 -46
  40. package/dist/cli/index.js.map +1 -1
  41. package/dist/cli/output.d.ts +19 -3
  42. package/dist/cli/output.d.ts.map +1 -1
  43. package/dist/cli/output.js +374 -82
  44. package/dist/cli/output.js.map +1 -1
  45. package/dist/cli/parser.d.ts +10 -1
  46. package/dist/cli/parser.d.ts.map +1 -1
  47. package/dist/cli/parser.js +155 -43
  48. package/dist/cli/parser.js.map +1 -1
  49. package/dist/cli/shell.d.ts.map +1 -1
  50. package/dist/cli/shell.js +31 -18
  51. package/dist/cli/shell.js.map +1 -1
  52. package/dist/core/factory.d.ts +2 -4
  53. package/dist/core/factory.d.ts.map +1 -1
  54. package/dist/core/factory.js +3 -34
  55. package/dist/core/factory.js.map +1 -1
  56. package/dist/core/mcp-client.d.ts +7 -2
  57. package/dist/core/mcp-client.d.ts.map +1 -1
  58. package/dist/core/mcp-client.js +86 -36
  59. package/dist/core/mcp-client.js.map +1 -1
  60. package/dist/core/transports.d.ts +2 -2
  61. package/dist/core/transports.d.ts.map +1 -1
  62. package/dist/core/transports.js +36 -45
  63. package/dist/core/transports.js.map +1 -1
  64. package/dist/lib/auth/keychain.d.ts +3 -0
  65. package/dist/lib/auth/keychain.d.ts.map +1 -1
  66. package/dist/lib/auth/keychain.js +18 -0
  67. package/dist/lib/auth/keychain.js.map +1 -1
  68. package/dist/lib/auth/oauth-flow.d.ts.map +1 -1
  69. package/dist/lib/auth/oauth-flow.js +55 -12
  70. package/dist/lib/auth/oauth-flow.js.map +1 -1
  71. package/dist/lib/auth/oauth-provider.d.ts.map +1 -1
  72. package/dist/lib/auth/oauth-provider.js +5 -23
  73. package/dist/lib/auth/oauth-provider.js.map +1 -1
  74. package/dist/lib/auth/oauth-token-manager.d.ts.map +1 -1
  75. package/dist/lib/auth/oauth-token-manager.js +0 -10
  76. package/dist/lib/auth/oauth-token-manager.js.map +1 -1
  77. package/dist/lib/auth/profiles.d.ts +5 -1
  78. package/dist/lib/auth/profiles.d.ts.map +1 -1
  79. package/dist/lib/auth/profiles.js +80 -13
  80. package/dist/lib/auth/profiles.js.map +1 -1
  81. package/dist/lib/bridge-manager.d.ts +3 -2
  82. package/dist/lib/bridge-manager.d.ts.map +1 -1
  83. package/dist/lib/bridge-manager.js +42 -24
  84. package/dist/lib/bridge-manager.js.map +1 -1
  85. package/dist/lib/config.d.ts +3 -3
  86. package/dist/lib/config.d.ts.map +1 -1
  87. package/dist/lib/config.js.map +1 -1
  88. package/dist/lib/errors.d.ts +6 -1
  89. package/dist/lib/errors.d.ts.map +1 -1
  90. package/dist/lib/errors.js +13 -1
  91. package/dist/lib/errors.js.map +1 -1
  92. package/dist/lib/logger.d.ts +7 -1
  93. package/dist/lib/logger.d.ts.map +1 -1
  94. package/dist/lib/logger.js +20 -1
  95. package/dist/lib/logger.js.map +1 -1
  96. package/dist/lib/schema-validator.d.ts +36 -0
  97. package/dist/lib/schema-validator.d.ts.map +1 -0
  98. package/dist/lib/schema-validator.js +265 -0
  99. package/dist/lib/schema-validator.js.map +1 -0
  100. package/dist/lib/session-client.d.ts +2 -2
  101. package/dist/lib/session-client.d.ts.map +1 -1
  102. package/dist/lib/session-client.js +3 -3
  103. package/dist/lib/session-client.js.map +1 -1
  104. package/dist/lib/sessions.d.ts +1 -1
  105. package/dist/lib/sessions.d.ts.map +1 -1
  106. package/dist/lib/sessions.js +22 -10
  107. package/dist/lib/sessions.js.map +1 -1
  108. package/dist/lib/types.d.ts +19 -25
  109. package/dist/lib/types.d.ts.map +1 -1
  110. package/dist/lib/types.js.map +1 -1
  111. package/dist/lib/utils.d.ts +2 -0
  112. package/dist/lib/utils.d.ts.map +1 -1
  113. package/dist/lib/utils.js +13 -1
  114. package/dist/lib/utils.js.map +1 -1
  115. package/docs/README.md +19 -0
  116. package/docs/TODOs.md +43 -0
  117. package/docs/claude-skill/SKILL.md +50 -30
  118. package/docs/images/mcpc-screenshot.png +0 -0
  119. package/package.json +15 -10
  120. package/PUBLISHING.md +0 -111
  121. package/TESTING.md +0 -212
  122. package/TODOs.md +0 -85
package/dist/lib/utils.js CHANGED
@@ -91,7 +91,9 @@ export function isValidHttpUrl(str) {
91
91
  export function normalizeServerUrl(str) {
92
92
  let urlString = str;
93
93
  if (!str.includes('://')) {
94
- urlString = `https://${str}`;
94
+ const hostPart = (str.split(/[:/]/)[0] || '').toLowerCase();
95
+ const isLocalhost = hostPart === 'localhost' || hostPart === '127.0.0.1';
96
+ urlString = isLocalhost ? `http://${str}` : `https://${str}`;
95
97
  }
96
98
  if (!isValidHttpUrl(urlString)) {
97
99
  throw new Error(`Invalid MCP server URL: ${str}`);
@@ -183,4 +185,14 @@ let requestIdCounter = 0;
183
185
  export function generateRequestId() {
184
186
  return `req_${Date.now()}_${++requestIdCounter}`;
185
187
  }
188
+ export const REDACTED_HEADER_VALUE = '<redacted>';
189
+ export function redactHeaders(headers) {
190
+ if (Object.keys(headers).length === 0)
191
+ return headers;
192
+ const redacted = {};
193
+ for (const key of Object.keys(headers)) {
194
+ redacted[key] = REDACTED_HEADER_VALUE;
195
+ }
196
+ return redacted;
197
+ }
186
198
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"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"}
package/docs/README.md ADDED
@@ -0,0 +1,19 @@
1
+ # mcpc documentation
2
+
3
+ Additional documentation for mcpc.
4
+
5
+ ## Contents
6
+
7
+ - [Claude Skill](./claude-skill/) - Claude Code skill for AI agents using mcpc
8
+ - [CONTRIBUTING.md](../CONTRIBUTING.md) - Development, contributing, and publishing guide
9
+
10
+ ## Main documentation
11
+
12
+ See the main [README.md](../README.md) for:
13
+
14
+ - Installation and quickstart
15
+ - Usage and command reference
16
+ - Sessions and authentication
17
+ - Configuration options
18
+ - MCP feature support
19
+ - Security considerations
package/docs/TODOs.md ADDED
@@ -0,0 +1,43 @@
1
+
2
+ # TODOs
3
+
4
+
5
+
6
+ ## MCP features
7
+
8
+ - `--capabilities '{"tools":...,"prompts":...}"` to limit access to selected MCP features and tools,
9
+ for both proxy and normal session, for simplicity.
10
+ - Implement resources-subscribe/resources-unsubscribe, --o file command properly, --max-size
11
+ automatically update the -o file on changes, without it just keep track of changed files in
12
+ bridge process' cache, and report in resources-list/resources-read operation
13
+
14
+
15
+ ## Later
16
+
17
+ - perf: make the libsecret dependency soft - only load it when using keychain, but skip
18
+ for auth-less (AI sandbox) use
19
+ - ux: Be even more forgiving with `args:=x`, when we know from tools/prompt schema the text is compatible with `x` even if the exact type is not -
20
+ just re-type it dynamically to make it work.
21
+ - nit: Cooler OAuth flow finish web page with CSS animation, add Apify example there, show mcpc info. E.g. next step - check Apify rather than close
22
+ - security: For auth profiles, fetch the detailed user info via http, save to profiles.json and show in 'mcpc', ensure the info is up-to-date
23
+ - later: Add unique Session.id and Profile.id and use it for OS keychain keys, to truly enable using multiple independent mcpc profiles. Use cry
24
+ - nit: Implement typing completions (e.g. "mcpc @a...") - not sure if that's even possible
25
+ - later: maybe add --no-color option to disable chalk
26
+
27
+ ## E2E test scenarios
28
+
29
+ - Test that "mcpc <remote-server> --json --header "X-Test: Blah" redacts the header in --verbose
30
+
31
+ - Test auth profiles work long-term and sessions too - basically when running some tests the
32
+ next day they should use old saved auths and sessions.
33
+ We could have some special dir for long-term testing...
34
+
35
+
36
+ When I run "mcpc mcp.apify.com\?tools=docs tools-list" on new system, it fails even though it should work - the server is open and doesn't require OAuth. Add unit test for that, in isolated home dir to ensure we don't interfere
37
+ with local auth profiles. Here's the error I got:
38
+
39
+
40
+
41
+ # Questions
42
+
43
+ mcpc mcp.apify.com shell --- do we also open session, how does it work? Let's mention this in readme.
@@ -21,8 +21,8 @@ mcpc @<session>
21
21
 
22
22
  # Tools
23
23
  mcpc <target> tools-list
24
- mcpc <target> tools-schema <tool-name>
25
- mcpc <target> tools-call <tool-name> --args '{"key":"value"}'
24
+ mcpc <target> tools-get <tool-name>
25
+ mcpc <target> tools-call <tool-name> key:=value key2:="string value"
26
26
 
27
27
  # Resources
28
28
  mcpc <target> resources-list
@@ -30,10 +30,10 @@ mcpc <target> resources-read <uri>
30
30
 
31
31
  # Prompts
32
32
  mcpc <target> prompts-list
33
- mcpc <target> prompts-get <prompt-name> --args key=value
33
+ mcpc <target> prompts-get <prompt-name> arg1:=value1
34
34
 
35
35
  # Sessions (persistent connections)
36
- mcpc <server> session @<name>
36
+ mcpc <server> connect @<name>
37
37
  mcpc @<name> <command>
38
38
  mcpc @<name> close
39
39
 
@@ -44,34 +44,32 @@ mcpc <server> logout
44
44
 
45
45
  ## Target types
46
46
 
47
- - `mcp.example.com` - Direct HTTP connection to remote server
47
+ - `mcp.example.com` - Direct HTTPS connection to remote server
48
+ - `localhost:8080` or `127.0.0.1:8080` - Local HTTP server (http:// is default for localhost)
48
49
  - `@session-name` - Named persistent session (faster, maintains state)
49
50
  - `config-entry` - Entry from config file (with `--config`)
50
51
 
51
52
  ## Passing arguments
52
53
 
53
- **Inline JSON** (recommended for complex data):
54
- ```bash
55
- mcpc @s tools-call search --args '{"query":"hello","limit":10}'
56
- ```
54
+ Arguments use `key:=value` syntax. Values are auto-parsed as JSON when valid:
57
55
 
58
- **Key=value pairs** (strings):
59
56
  ```bash
60
- mcpc @s tools-call search --args query="hello world" filter=active
61
- ```
57
+ # String values
58
+ mcpc @s tools-call search query:="hello world"
62
59
 
63
- **Key:=json pairs** (typed values):
64
- ```bash
65
- mcpc @s tools-call search --args query="hello" limit:=10 enabled:=true
66
- ```
60
+ # Numbers, booleans, null (auto-parsed as JSON)
61
+ mcpc @s tools-call search query:="hello" limit:=10 enabled:=true
67
62
 
68
- **From file**:
69
- ```bash
70
- mcpc @s tools-call search --args-file params.json
71
- ```
63
+ # Complex JSON values
64
+ mcpc @s tools-call search config:='{"nested":"value"}' items:='[1,2,3]'
72
65
 
73
- **From stdin** (auto-detected when piped):
74
- ```bash
66
+ # Force string type with JSON quotes
67
+ mcpc @s tools-call search id:='"123"'
68
+
69
+ # Inline JSON object (if first arg starts with { or [)
70
+ mcpc @s tools-call search '{"query":"hello","limit":10}'
71
+
72
+ # From stdin (auto-detected when piped)
75
73
  echo '{"query":"hello"}' | mcpc @s tools-call search
76
74
  ```
77
75
 
@@ -84,7 +82,7 @@ Always use `--json` flag for machine-readable output:
84
82
  mcpc --json @apify tools-list
85
83
 
86
84
  # Call tool and parse result with jq
87
- mcpc --json @apify tools-call search --args query="test" | jq '.content[0].text'
85
+ mcpc --json @apify tools-call search query:="test" | jq '.content[0].text'
88
86
 
89
87
  # Chain commands
90
88
  mcpc --json @server1 tools-call get-data | mcpc @server2 tools-call process
@@ -96,28 +94,50 @@ Create sessions for repeated interactions:
96
94
 
97
95
  ```bash
98
96
  # Create session (or reconnect if exists)
99
- mcpc mcp.apify.com session @apify
97
+ mcpc mcp.apify.com connect @apify
100
98
 
101
99
  # Use session (faster - no reconnection overhead)
102
100
  mcpc @apify tools-list
103
- mcpc @apify tools-call search --args query="test"
101
+ mcpc @apify tools-call search query:="test"
102
+
103
+ # Restart session (useful after server updates)
104
+ mcpc @apify restart
104
105
 
105
106
  # Close when done
106
107
  mcpc @apify close
107
108
  ```
108
109
 
110
+ **Session states:**
111
+ - 🟢 **live** - Bridge running, server might or might not be responding
112
+ - 🟡 **crashed** - Bridge crashed; auto-restarts on next use
113
+ - 🔴 **expired** - Server rejected session; needs `close` and reconnect
114
+
109
115
  ## Authentication
110
116
 
111
117
  **OAuth (interactive login)**:
112
118
  ```bash
113
119
  mcpc mcp.apify.com login
114
- mcpc mcp.apify.com session @apify
120
+ mcpc mcp.apify.com connect @apify
115
121
  ```
116
122
 
117
123
  **Bearer token**:
118
124
  ```bash
119
125
  mcpc -H "Authorization: Bearer $TOKEN" mcp.apify.com tools-list
120
- mcpc -H "Authorization: Bearer $TOKEN" mcp.apify.com session @myserver
126
+ mcpc -H "Authorization: Bearer $TOKEN" mcp.apify.com connect @myserver
127
+ ```
128
+
129
+ ## Proxy server for AI isolation
130
+
131
+ Create a proxy MCP server that hides authentication tokens:
132
+
133
+ ```bash
134
+ # Human creates authenticated session with proxy
135
+ mcpc mcp.apify.com connect @ai-proxy --proxy 8080
136
+
137
+ # AI agent connects to proxy (no access to original tokens)
138
+ # Note: localhost defaults to http://
139
+ mcpc localhost:8080 tools-list
140
+ mcpc 127.0.0.1:8080 connect @sandboxed
121
141
  ```
122
142
 
123
143
  ## Common patterns
@@ -125,12 +145,12 @@ mcpc -H "Authorization: Bearer $TOKEN" mcp.apify.com session @myserver
125
145
  **List and inspect tools**:
126
146
  ```bash
127
147
  mcpc @s tools-list
128
- mcpc @s tools-schema tool-name
148
+ mcpc @s tools-get tool-name
129
149
  ```
130
150
 
131
151
  **Call tool and extract text result**:
132
152
  ```bash
133
- mcpc --json @s tools-call my-tool --args '{}' | jq -r '.content[0].text'
153
+ mcpc --json @s tools-call my-tool | jq -r '.content[0].text'
134
154
  ```
135
155
 
136
156
  **Read resource content**:
@@ -155,5 +175,5 @@ mcpc --config .vscode/mcp.json filesystem resources-list
155
175
 
156
176
  ```bash
157
177
  # Verbose output shows protocol details
158
- mcpc --verbose @s tools-call my-tool --args '{}'
178
+ mcpc --verbose @s tools-call my-tool
159
179
  ```
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apify/mcpc",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "description": "Universal command-line client for the Model Context Protocol (MCP).",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -30,23 +30,25 @@
30
30
  "scripts": {
31
31
  "build": "tsc",
32
32
  "build:watch": "tsc --watch",
33
- "build:toc": "doctoc README.md --github --notitle && sed -i '' '/^- \\[mcpc:/d' README.md",
34
- "test": "npm run test:unit && npm run test:e2e",
35
- "test:unit": "jest --passWithNoTests",
33
+ "build:readme": "./scripts/update-readme.sh",
34
+ "test": "npm run build && npm run test:unit && ./test/e2e/run.sh --no-build",
35
+ "test:unit": "jest",
36
36
  "test:watch": "jest --watch",
37
- "test:coverage": "jest --coverage",
38
- "test:e2e": "./test/e2e/run.sh",
37
+ "test:coverage": "npm run test:coverage:unit && npm run test:coverage:e2e && npm run test:coverage:merge",
38
+ "test:coverage:unit": "jest --coverage && find test/coverage/unit -name '*.html' -exec sed -i '' -e 's/Code coverage report for All files/mcpc Coverage (Unit Tests)/g' -e 's/<h1>All files<\\/h1>/<h1>Unit Test Coverage<\\/h1>/g' {} \\;",
39
+ "test:coverage:e2e": "./test/e2e/run.sh --coverage",
40
+ "test:coverage:merge": "test/coverage/coverage-merge.sh",
41
+ "test:e2e": "./test/e2e/run.sh --keep",
39
42
  "lint": "eslint src/**/*.ts",
40
43
  "lint:fix": "eslint src/**/*.ts --fix",
41
44
  "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
42
45
  "format:check": "prettier --check \"src/**/*.ts\" \"test/**/*.ts\"",
43
46
  "clean": "rm -rf dist",
44
47
  "prebuild": "npm run clean",
45
- "prepublishOnly": "npm run lint && npm run build && npm test",
48
+ "prepublishOnly": "npm run lint && npm run build:readme && npm run build && npm test",
46
49
  "release": "bash scripts/publish.sh",
47
50
  "release:minor": "bash scripts/publish.sh minor",
48
- "release:major": "bash scripts/publish.sh major",
49
- "publish:placeholder": "bash scripts/publish-placeholder.sh"
51
+ "release:major": "bash scripts/publish.sh major"
50
52
  },
51
53
  "dependencies": {
52
54
  "@inquirer/input": "^5.0.3",
@@ -61,14 +63,17 @@
61
63
  },
62
64
  "devDependencies": {
63
65
  "@types/jest": "^30.0.0",
64
- "doctoc": "^2.2.1",
65
66
  "@types/node": "^25.0.3",
66
67
  "@types/proper-lockfile": "^4.1.4",
67
68
  "@types/uuid": "^11.0.0",
68
69
  "@typescript-eslint/eslint-plugin": "^8.50.0",
69
70
  "@typescript-eslint/parser": "^8.50.0",
71
+ "c8": "^10.1.3",
72
+ "doctoc": "^2.2.1",
70
73
  "eslint": "^8.57.1",
71
74
  "jest": "^30.2.0",
75
+ "markdown-link-check": "^3.14.2",
76
+ "nyc": "^17.1.0",
72
77
  "prettier": "^3.7.4",
73
78
  "ts-jest": "^29.4.6",
74
79
  "typescript": "^5.9.3"
package/PUBLISHING.md DELETED
@@ -1,111 +0,0 @@
1
- # Publishing Guide
2
-
3
- ## Reserve Package Name (Placeholder)
4
-
5
- To reserve the `mcpc` package name on npm without publishing the full implementation:
6
-
7
- 1. Make sure you're logged in to npm:
8
- ```bash
9
- npm login
10
- ```
11
-
12
- 2. Run the placeholder publish script:
13
- ```bash
14
- npm run publish:placeholder
15
- ```
16
-
17
- This will publish `mcpc@0.0.1` with a minimal placeholder that:
18
- - Reserves the package name
19
- - Points users to the GitHub repository
20
- - Clearly indicates the package is under development
21
-
22
- ## Publish Full Version
23
-
24
- When ready to publish the full implementation:
25
-
26
- 1. **Ensure everything is ready:**
27
- ```bash
28
- npm run build
29
- npm test
30
- npm run lint
31
- ```
32
-
33
- 2. **Update version** (choose appropriate level):
34
- ```bash
35
- npm version patch # 0.0.1 -> 0.0.2
36
- npm version minor # 0.0.x -> 0.1.0
37
- npm version major # 0.x.x -> 1.0.0
38
- ```
39
-
40
- 3. **Publish:**
41
- ```bash
42
- npm publish --access public
43
- ```
44
-
45
- The `prepublishOnly` script will automatically:
46
- - Clean the dist folder
47
- - Run the build
48
- - Run all tests
49
-
50
- 4. **Push git tags:**
51
- ```bash
52
- git push --follow-tags
53
- ```
54
-
55
- ## What Gets Published
56
-
57
- Files included in the npm package (see `.npmignore`):
58
- - ✅ `dist/` - Compiled JavaScript
59
- - ✅ `bin/` - CLI executables
60
- - ✅ `package.json`
61
- - ✅ `README.md`
62
- - ✅ `LICENSE`
63
-
64
- Files excluded:
65
- - ❌ `src/` - TypeScript source (users only need compiled JS)
66
- - ❌ `test/` - Test files
67
- - ❌ `scripts/` - Development scripts
68
- - ❌ Config files (tsconfig.json, etc.)
69
-
70
- ## Testing the Package Locally
71
-
72
- Before publishing, test what will be included:
73
-
74
- ```bash
75
- # See what files will be published
76
- npm pack --dry-run
77
-
78
- # Create a tarball to inspect
79
- npm pack
80
-
81
- # Test installation locally
82
- npm install -g ./mcpc-0.1.0.tgz
83
- mcpc --help
84
- npm uninstall -g mcpc
85
- ```
86
-
87
- ## Version Strategy
88
-
89
- - `0.0.x` - Placeholder / early development
90
- - `0.1.0` - First functional release (direct connection working)
91
- - `0.2.0` - Add session management / bridge process
92
- - `0.3.0` - Add interactive shell
93
- - `1.0.0` - Stable release with all core features
94
-
95
- ## Troubleshooting
96
-
97
- ### "You do not have permission to publish"
98
- Make sure you're logged in: `npm whoami`
99
-
100
- ### "Package name too similar to existing package"
101
- The name `mcpc` should be available, but if not, consider:
102
- - `@apify/mcpc` (scoped package)
103
- - `mcp-cli`
104
- - `mcpcli`
105
-
106
- ### "prepublishOnly script failed"
107
- Fix any build or test errors before publishing:
108
- ```bash
109
- npm run build
110
- npm test
111
- ```
package/TESTING.md DELETED
@@ -1,212 +0,0 @@
1
- # Quick Testing Guide for mcpc
2
-
3
- This guide provides quick commands to test the current implementation of mcpc.
4
-
5
- ## Prerequisites
6
-
7
- ```bash
8
- npm install
9
- npm run build
10
- ```
11
-
12
- ## Quick Tests
13
-
14
- ### 1. Help and Version
15
-
16
- ```bash
17
- # Show help
18
- node dist/cli/index.js --help
19
-
20
- # Show version
21
- node dist/cli/index.js --version
22
- ```
23
-
24
- ### 2. HTTP URL Targets
25
-
26
- ```bash
27
- # Try to connect to a URL (will fail - no real server)
28
- node dist/cli/index.js https://example.com/mcp tools-list
29
-
30
- # With verbose logging
31
- node dist/cli/index.js https://example.com/mcp --verbose tools-list
32
- ```
33
-
34
- ### 3. Config File Loading
35
-
36
- ```bash
37
- # List servers in config
38
- cat examples/test-config.json
39
-
40
- # Use HTTP server from config (will fail to connect)
41
- node dist/cli/index.js --config examples/test-config.json example-http tools-list
42
-
43
- # Try non-existent server (shows error)
44
- node dist/cli/index.js --config examples/test-config.json bad-server tools-list
45
-
46
- # Test environment variable substitution
47
- EXAMPLE_API_TOKEN=secret123 node dist/cli/index.js \
48
- --config examples/test-config.json example-http tools-list
49
- ```
50
-
51
- ### 4. Package Resolution
52
-
53
- ```bash
54
- # Create test package in node_modules
55
- mkdir -p node_modules/example-mcp-server
56
- cp -r examples/test-package/* node_modules/example-mcp-server/
57
-
58
- # Try to use the package (will fail - not a real MCP server)
59
- node dist/cli/index.js example-mcp-server tools-list
60
-
61
- # Try non-existent package (shows helpful error)
62
- node dist/cli/index.js nonexistent-package tools-list
63
-
64
- # With verbose to see resolution details
65
- node dist/cli/index.js example-mcp-server --verbose tools-list
66
- ```
67
-
68
- ### 5. Named Sessions (Not Implemented)
69
-
70
- ```bash
71
- # Try named session (shows "not implemented")
72
- node dist/cli/index.js @my-session tools-list
73
- ```
74
-
75
- ## Real MCP Server Testing
76
-
77
- To test with an actual MCP server, you can:
78
-
79
- ### Option 1: Install an official MCP server package
80
-
81
- ```bash
82
- # Install a real MCP server (example - adjust as needed)
83
- npm install -g @modelcontextprotocol/server-filesystem
84
-
85
- # Use it with mcpc
86
- mcpc @modelcontextprotocol/server-filesystem tools-list
87
- ```
88
-
89
- ### Option 2: Use a remote MCP server
90
-
91
- ```bash
92
- # If you have access to a real MCP server URL
93
- mcpc https://your-mcp-server.com tools-list
94
- mcpc https://your-mcp-server.com resources-list
95
- ```
96
-
97
- ### Option 3: Create a config file for your servers
98
-
99
- ```json
100
- {
101
- "mcpServers": {
102
- "my-server": {
103
- "url": "https://my-real-mcp-server.com",
104
- "headers": {
105
- "Authorization": "Bearer ${MY_API_KEY}"
106
- }
107
- },
108
- "filesystem": {
109
- "command": "npx",
110
- "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
111
- }
112
- }
113
- }
114
- ```
115
-
116
- Then use it:
117
- ```bash
118
- MY_API_KEY=secret mcpc --config my-config.json my-server tools-list
119
- mcpc --config my-config.json filesystem resources-list
120
- ```
121
-
122
- ## Unit Tests
123
-
124
- ```bash
125
- # Run all tests
126
- npm test
127
-
128
- # Run specific test file
129
- npm test -- test/lib/config.test.ts
130
- npm test -- test/lib/logger.test.ts
131
-
132
- # Run with coverage
133
- npm run test:coverage
134
-
135
- # Watch mode
136
- npm run test:watch
137
- ```
138
-
139
- ## Linting
140
-
141
- ```bash
142
- # Check for issues
143
- npm run lint
144
-
145
- # Auto-fix issues
146
- npm run lint:fix
147
- ```
148
-
149
- ## Expected Behaviors
150
-
151
- ### ✅ Should Work
152
-
153
- - CLI help and version display
154
- - HTTP URL parsing and resolution
155
- - Config file loading and parsing
156
- - Environment variable substitution in configs
157
- - Package discovery in node_modules
158
- - Global package discovery (npm and Bun)
159
- - Clear error messages for missing files/packages
160
- - Verbose logging with --verbose flag
161
-
162
- ### ❌ Will Fail (Expected)
163
-
164
- These will fail because they require actual MCP servers:
165
-
166
- - Connecting to example.com (not an MCP server)
167
- - Using the test package (doesn't implement MCP protocol)
168
- - Any command that needs actual MCP communication
169
-
170
- These will fail because they're not implemented yet:
171
-
172
- - Named sessions (@session-name)
173
- - Session commands (connect, close)
174
- - Interactive shell
175
-
176
- ## Troubleshooting
177
-
178
- ### "Package not found" error
179
- - Make sure the package is installed in node_modules or globally
180
- - Check the package name spelling
181
- - Verify package.json exists in the package
182
-
183
- ### "Config file not found" error
184
- - Check the path to the config file
185
- - Use absolute path or path relative to current directory
186
-
187
- ### "Server not found in config" error
188
- - Check the server name matches exactly (case-sensitive)
189
- - List available servers in the error message
190
-
191
- ### "Failed to connect" error
192
- - This is expected when testing with non-real MCP servers
193
- - Use a real MCP server URL or package to test actual connections
194
-
195
- ## What's Next
196
-
197
- After confirming tests work, you can proceed with:
198
-
199
- **Phase 2: Bridge & Sessions**
200
- - Persistent MCP connections
201
- - Session management
202
- - Unix socket IPC
203
-
204
- **Phase 3: Authentication**
205
- - OAuth 2.1 support
206
- - Keychain integration
207
- - Auth profile management
208
-
209
- **Phase 4: Enhancements**
210
- - Interactive shell
211
- - Caching
212
- - Tab completion