@syrin/cli 1.4.0 → 1.4.1
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 +158 -162
- package/dist/cli/commands/dev.d.ts +2 -2
- package/dist/cli/commands/dev.js +3 -3
- package/dist/cli/index.js +2 -2
- package/dist/config/merger.js +1 -1
- package/package.json +23 -23
package/README.md
CHANGED
|
@@ -1,99 +1,131 @@
|
|
|
1
1
|
# Syrin
|
|
2
2
|
|
|
3
|
-

|
|
3
|
+

|
|
4
4
|
|
|
5
|
-
[](https://www.npmjs.com/package/@syrin/cli) [](https://opensource.org/licenses/ISC) [](https://nodejs.org/)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Stop Silent Failures in AI Tool Calls
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Your AI agent just called the same tool 47 times with identical parameters.
|
|
10
|
+
Your logs look fine. You're silently burning $200 in tokens.
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
**Syrin catches these failures before production.**
|
|
12
13
|
|
|
13
14
|
---
|
|
14
15
|
|
|
15
|
-
##
|
|
16
|
+
## What Is This?
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
Syrin is a development toolkit for [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) servers — the standard way AI agents call external tools.
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
2. Connect an LLM
|
|
21
|
-
3. Run the server
|
|
22
|
-
4. Hope execution behaves as expected
|
|
20
|
+
**Without Syrin:**
|
|
23
21
|
|
|
24
|
-
|
|
22
|
+
```txt
|
|
23
|
+
Tool called 47x → No visibility
|
|
24
|
+
$200 burned → Silent failure
|
|
25
|
+
Logs look "fine" → Debug for hours
|
|
26
|
+
```
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
- Behaviour changes between runs
|
|
28
|
-
- Debugging relies on logs and guesswork
|
|
29
|
-
- Contract issues surface only after failures
|
|
28
|
+
**With Syrin:**
|
|
30
29
|
|
|
31
|
-
|
|
30
|
+
```txt
|
|
31
|
+
Loop detected at call #3 → Execution halted
|
|
32
|
+
Full event trace → See exactly what happened
|
|
33
|
+
Contract validated → Catch issues before runtime
|
|
34
|
+
```
|
|
32
35
|
|
|
33
36
|
---
|
|
34
37
|
|
|
35
|
-
##
|
|
38
|
+
## What Syrin Catches
|
|
36
39
|
|
|
37
|
-
|
|
40
|
+
**Tool Loops** — Model proposes the same tool repeatedly with no progress
|
|
38
41
|
|
|
39
|
-
|
|
40
|
-
npx @syrin/cli init
|
|
41
|
-
```
|
|
42
|
+
**Wrong Tool Selection** — Similar names, overlapping schemas, ambiguous descriptions cause silent misbehavior
|
|
42
43
|
|
|
43
|
-
|
|
44
|
+
**Silent Failures** — Tool throws an error but execution continues with broken state
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
npm install -g @syrin/cli
|
|
47
|
-
```
|
|
46
|
+
**Contract Mismatches** — Input/output schemas don't align between chained tools
|
|
48
47
|
|
|
49
|
-
|
|
48
|
+
**Hidden Dependencies** — Tools assume state that doesn't exist
|
|
50
49
|
|
|
51
|
-
|
|
52
|
-
npm install @syrin/cli
|
|
53
|
-
```
|
|
50
|
+
Documentation: [https://docs.syrin.dev](https://docs.syrin.dev)
|
|
54
51
|
|
|
55
|
-
|
|
52
|
+
---
|
|
56
53
|
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
## See It In Action
|
|
55
|
+
|
|
56
|
+
<table>
|
|
57
|
+
<tr>
|
|
58
|
+
<td width="33%"><strong>syrin analyse</strong><br/>Catch contract issues</td>
|
|
59
|
+
<td width="33%"><strong>syrin dev</strong><br/>Interactive development</td>
|
|
60
|
+
<td width="33%"><strong>syrin test</strong><br/>Sandboxed tool testing</td>
|
|
61
|
+
</tr>
|
|
62
|
+
<tr>
|
|
63
|
+
<td><img src="https://github.com/Syrin-Labs/cli/raw/main/assets/demo/syrin-analyse/analyse.gif" width="280" alt="syrin analyse demo"/></td>
|
|
64
|
+
<td><img src="https://github.com/Syrin-Labs/cli/raw/main/assets/demo/syrin-dev/dev.gif" width="280" alt="syrin dev demo"/></td>
|
|
65
|
+
<td><img src="https://github.com/Syrin-Labs/cli/raw/main/assets/demo/syrin-test/test_tool.gif" width="280" alt="syrin test demo"/></td>
|
|
66
|
+
</tr>
|
|
67
|
+
<tr>
|
|
68
|
+
<td width="33%"><strong>syrin init</strong><br/>Project setup</td>
|
|
69
|
+
<td width="33%"><strong>syrin list</strong><br/>Inspect tools</td>
|
|
70
|
+
<td width="33%"><strong>syrin test --connection</strong><br/>Connection test</td>
|
|
71
|
+
</tr>
|
|
72
|
+
<tr>
|
|
73
|
+
<td><img src="https://github.com/Syrin-Labs/cli/raw/main/assets/demo/syrin-init/init.gif" width="280" alt="syrin init demo"/></td>
|
|
74
|
+
<td><img src="https://github.com/Syrin-Labs/cli/raw/main/assets/demo/syrin-list/list.gif" width="280" alt="syrin list demo"/></td>
|
|
75
|
+
<td><img src="https://github.com/Syrin-Labs/cli/raw/main/assets/demo/syrin-test/test_connection.gif" width="280" alt="syrin test --connection demo"/></td>
|
|
76
|
+
</tr>
|
|
77
|
+
</table>
|
|
59
78
|
|
|
60
79
|
---
|
|
61
80
|
|
|
62
|
-
##
|
|
81
|
+
## Try It Now
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# No install needed — run directly
|
|
85
|
+
npx @syrin/cli analyse --transport http --url http://localhost:8000/mcp
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Or install globally:
|
|
63
89
|
|
|
64
|
-
|
|
90
|
+
```bash
|
|
91
|
+
npm install -g @syrin/cli
|
|
65
92
|
|
|
66
|
-
|
|
93
|
+
syrin init --global
|
|
94
|
+
syrin doctor # Check your environment
|
|
95
|
+
syrin analyse --transport http --url http://localhost:8000/mcp # Analyze an MCP server
|
|
96
|
+
syrin dev --exec --transport http --url http://localhost:8000/mcp # Interactive dev mode
|
|
97
|
+
```
|
|
67
98
|
|
|
68
|
-
|
|
99
|
+
Or initialize a project with local config:
|
|
69
100
|
|
|
70
|
-
```
|
|
71
|
-
|
|
101
|
+
```bash
|
|
102
|
+
npx @syrin/cli init
|
|
103
|
+
syrin doctor
|
|
104
|
+
syrin analyse
|
|
72
105
|
```
|
|
73
106
|
|
|
74
|
-
**
|
|
107
|
+
**Want to try with a sample server?** Clone the repo and use the included [example MCP server](./examples/demo-mcp-py/):
|
|
75
108
|
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
→ Enable execution with confidence
|
|
109
|
+
```bash
|
|
110
|
+
git clone https://github.com/Syrin-Labs/cli.git && cd cli/examples/demo-mcp-py
|
|
111
|
+
python3 -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt
|
|
112
|
+
python server.py --mode http --port 8000 &
|
|
113
|
+
npx @syrin/cli analyse --transport http --url http://localhost:8000/mcp
|
|
82
114
|
```
|
|
83
115
|
|
|
84
|
-
|
|
85
|
-
It makes MCP systems understandable and testable.
|
|
116
|
+
Requirements: Node.js >= 20.12, npm >= 9
|
|
86
117
|
|
|
87
118
|
---
|
|
88
119
|
|
|
89
|
-
##
|
|
120
|
+
## Core Commands
|
|
90
121
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
122
|
+
| Command | What It Does |
|
|
123
|
+
|---------|--------------|
|
|
124
|
+
| `syrin analyse` | Static analysis — catches contract issues before runtime |
|
|
125
|
+
| `syrin dev` | Interactive mode — see exactly what your LLM proposes |
|
|
126
|
+
| `syrin test` | Contract testing — validate tools in sandboxed execution |
|
|
127
|
+
| `syrin doctor` | Environment check — validate config and connections |
|
|
128
|
+
| `syrin list` | Inspect tools, resources, and prompts from your server |
|
|
97
129
|
|
|
98
130
|
---
|
|
99
131
|
|
|
@@ -115,7 +147,7 @@ syrin config setup --global
|
|
|
115
147
|
syrin config edit-env --global
|
|
116
148
|
|
|
117
149
|
# Use Syrin from any directory
|
|
118
|
-
syrin dev --exec --transport http --
|
|
150
|
+
syrin dev --exec --transport http --url http://localhost:8000/mcp
|
|
119
151
|
```
|
|
120
152
|
|
|
121
153
|
### Configuration Management
|
|
@@ -135,133 +167,82 @@ See the [Configuration Guide](docs/Commands/syrin-config.md) for more details.
|
|
|
135
167
|
|
|
136
168
|
## Key Capabilities
|
|
137
169
|
|
|
138
|
-
###
|
|
170
|
+
### `syrin analyse` — Find Problems Before They Hit Production
|
|
139
171
|
|
|
140
|
-
|
|
141
|
-
If contracts are vague or incomplete, behaviour becomes unreliable.
|
|
172
|
+
**The Problem:** Your LLM picks the wrong tool, or calls tools with missing parameters. You only find out after deployment when users report broken behavior.
|
|
142
173
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
- Tool definitions
|
|
146
|
-
- Parameter schemas
|
|
147
|
-
- Description clarity
|
|
148
|
-
- Implicit dependencies between tools
|
|
149
|
-
|
|
150
|
-
This catches issues **before runtime**.
|
|
174
|
+
**The Solution:** Static analysis of your tool contracts catches issues before any code runs.
|
|
151
175
|
|
|
152
176
|
```bash
|
|
153
|
-
syrin analyse
|
|
177
|
+
syrin analyse # Check all tool contracts
|
|
178
|
+
syrin analyse --ci # Exit code 1 on errors (for CI pipelines)
|
|
179
|
+
syrin analyse --strict # Treat warnings as errors
|
|
154
180
|
```
|
|
155
181
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
182
|
+
**What it catches:**
|
|
183
|
+
- Vague or missing tool descriptions
|
|
184
|
+
- Parameters without descriptions (LLMs guess wrong)
|
|
185
|
+
- Overlapping tools that confuse model selection
|
|
186
|
+
- Schema mismatches between chained tools
|
|
187
|
+
- Circular dependencies
|
|
161
188
|
|
|
162
189
|
---
|
|
163
190
|
|
|
164
|
-
###
|
|
191
|
+
### `syrin dev` — See What Your LLM Actually Does
|
|
165
192
|
|
|
166
|
-
|
|
193
|
+
**The Problem:** Your LLM calls tools, but you can't see *why* it chose that tool, what parameters it's sending, or what happens between steps. You're debugging blind.
|
|
167
194
|
|
|
168
|
-
|
|
169
|
-
- Execute tools only when explicitly enabled
|
|
170
|
-
- Switch between LLM providers
|
|
171
|
-
- Inspect large tool outputs safely
|
|
195
|
+
**The Solution:** An interactive environment where you see every tool proposal before it executes.
|
|
172
196
|
|
|
173
197
|
```bash
|
|
174
|
-
syrin dev
|
|
198
|
+
syrin dev # Preview mode (no execution)
|
|
199
|
+
syrin dev --exec # Enable execution when ready
|
|
175
200
|
```
|
|
176
201
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
202
|
+
**What you get:**
|
|
203
|
+
- See exactly which tool the LLM wants to call and why
|
|
204
|
+
- Inspect parameters before they're sent
|
|
205
|
+
- Step through tool chains one call at a time
|
|
206
|
+
- Full event trace of every decision
|
|
182
207
|
|
|
183
208
|
---
|
|
184
209
|
|
|
185
|
-
###
|
|
210
|
+
### `syrin test` — Validate Tools in Isolation
|
|
186
211
|
|
|
187
|
-
**
|
|
212
|
+
**The Problem:** A tool works fine in manual testing, but in production it has side effects you didn't expect, returns massive outputs that blow your context window, or behaves differently on repeated calls.
|
|
188
213
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
- **Tool Unit Contracts**: Define behavioral guarantees in `tools/<tool-name>.yaml` files
|
|
192
|
-
- **Sandboxed Execution**: Tools tested in isolated environments with resource limits
|
|
193
|
-
- **Behavioral Observation**: Detects side effects, non-determinism, output explosions, hidden dependencies
|
|
194
|
-
- **Process Reuse**: Optimized for performance (100+ tools in 1-3 minutes)
|
|
214
|
+
**The Solution:** Sandboxed execution that validates each tool against its behavioral contract.
|
|
195
215
|
|
|
196
216
|
```bash
|
|
197
|
-
#
|
|
198
|
-
syrin test
|
|
199
|
-
|
|
200
|
-
#
|
|
201
|
-
syrin test --tool fetch_user
|
|
202
|
-
|
|
203
|
-
# Strict mode (warnings become errors)
|
|
204
|
-
syrin test --strict
|
|
205
|
-
|
|
206
|
-
# JSON output for CI
|
|
207
|
-
syrin test --json
|
|
217
|
+
syrin test # Test all tools
|
|
218
|
+
syrin test --tool fetch_user # Test specific tool
|
|
219
|
+
syrin test --strict # Warnings become errors
|
|
220
|
+
syrin test --json # JSON output for CI
|
|
208
221
|
```
|
|
209
222
|
|
|
210
|
-
**
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
### Protocol and Configuration Validation
|
|
217
|
-
|
|
218
|
-
Before running anything, Syrin validates assumptions.
|
|
223
|
+
**What it catches:**
|
|
224
|
+
- Unexpected side effects (file writes, network calls)
|
|
225
|
+
- Non-deterministic outputs
|
|
226
|
+
- Output size explosions
|
|
227
|
+
- Hidden dependencies on external state
|
|
228
|
+
- Contract violations
|
|
219
229
|
|
|
220
|
-
|
|
221
|
-
syrin doctor
|
|
222
|
-
syrin test --connection # Test MCP connection only
|
|
223
|
-
```
|
|
230
|
+
---
|
|
224
231
|
|
|
225
|
-
|
|
232
|
+
### `syrin doctor` — Validate Your Setup
|
|
226
233
|
|
|
227
|
-
|
|
228
|
-
- Environment variables are set
|
|
229
|
-
- MCP protocol is followed correctly
|
|
234
|
+
**The Problem:** Something's misconfigured, but you're not sure what. API keys? Transport settings? MCP connection?
|
|
230
235
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
## Typical Workflow
|
|
236
|
+
**The Solution:** A single command that checks everything.
|
|
234
237
|
|
|
235
238
|
```bash
|
|
236
|
-
syrin
|
|
237
|
-
syrin
|
|
238
|
-
syrin analyse # Static analysis of tool contracts
|
|
239
|
-
syrin test # Validate tool contracts (sandboxed execution)
|
|
240
|
-
syrin test --connection # Test MCP protocol connection
|
|
241
|
-
syrin dev # Inspect behaviour interactively
|
|
239
|
+
syrin doctor # Check config, env, connections
|
|
240
|
+
syrin test --connection # Test MCP connection only
|
|
242
241
|
```
|
|
243
242
|
|
|
244
|
-
This workflow is designed to catch issues **before production**.
|
|
245
|
-
|
|
246
243
|
---
|
|
247
244
|
|
|
248
|
-
##
|
|
249
|
-
|
|
250
|
-
| Command | Purpose |
|
|
251
|
-
| ------------------------- | --------------------------------------------- |
|
|
252
|
-
| `syrin init` | Initialise a Syrin project |
|
|
253
|
-
| `syrin doctor` | Validate configuration and environment |
|
|
254
|
-
| `syrin analyse` | Static analysis of MCP tool contracts |
|
|
255
|
-
| `syrin test` | Validate tool contracts (sandboxed execution) |
|
|
256
|
-
| `syrin test --connection` | Test MCP protocol connection (legacy) |
|
|
257
|
-
| `syrin list` | Inspect tools, resources, and prompts |
|
|
258
|
-
| `syrin dev` | Interactive execution inspection |
|
|
259
|
-
|
|
260
|
-
Full documentation: [https://docs.syrin.dev/commands](https://docs.syrin.dev/commands)
|
|
261
|
-
|
|
262
|
-
---
|
|
263
|
-
|
|
264
|
-
## Tool Contracts (v1.3.0)
|
|
245
|
+
## Tool Contracts
|
|
265
246
|
|
|
266
247
|
Define behavioral guarantees for your tools in `tools/<tool-name>.yaml` files:
|
|
267
248
|
|
|
@@ -282,17 +263,12 @@ See [Tool Contracts Documentation](./docs/tool-contracts.md) for details.
|
|
|
282
263
|
|
|
283
264
|
## Configuration
|
|
284
265
|
|
|
285
|
-
Syrin
|
|
266
|
+
Syrin supports **two configuration layers**:
|
|
286
267
|
|
|
287
|
-
|
|
288
|
-
syrin.yaml
|
|
289
|
-
```
|
|
268
|
+
- **Local** (`syrin.yaml` in project root) — transport, MCP connection, LLM providers
|
|
269
|
+
- **Global** (`~/.syrin/syrin.yaml`) — shared LLM API keys and defaults across projects
|
|
290
270
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
- Transport type (`stdio` or `http`)
|
|
294
|
-
- MCP server connection
|
|
295
|
-
- Allowed LLM providers
|
|
271
|
+
Local config overrides global config. CLI flags override both.
|
|
296
272
|
|
|
297
273
|
Configuration reference: [https://docs.syrin.dev/configuration](https://docs.syrin.dev/configuration)
|
|
298
274
|
|
|
@@ -322,17 +298,37 @@ Provider configuration: [https://docs.syrin.dev/configuration/llm](https://docs.
|
|
|
322
298
|
|
|
323
299
|
---
|
|
324
300
|
|
|
301
|
+
## Community
|
|
302
|
+
|
|
303
|
+
- [Discord](https://discord.gg/j8GUvHybSa) — Ask questions, share feedback
|
|
304
|
+
- [GitHub Discussions](https://github.com/Syrin-Labs/cli/discussions) — Feature ideas, show & tell
|
|
305
|
+
- [Documentation](https://docs.syrin.dev) — Full guides and API reference
|
|
306
|
+
|
|
307
|
+
Found a bug or have a feature request? [Open an issue](https://github.com/Syrin-Labs/cli/issues) — we read every one.
|
|
308
|
+
|
|
309
|
+
If Syrin helped you catch something your logs missed, a [star on GitHub](https://github.com/Syrin-Labs/cli) helps others find it too.
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
325
313
|
## Links
|
|
326
314
|
|
|
327
315
|
- Documentation: [https://docs.syrin.dev](https://docs.syrin.dev)
|
|
328
|
-
- GitHub: [https://github.com/
|
|
329
|
-
- Issues: [https://github.com/
|
|
316
|
+
- GitHub: [https://github.com/Syrin-Labs/cli](https://github.com/Syrin-Labs/cli)
|
|
317
|
+
- Issues: [https://github.com/Syrin-Labs/cli/issues](https://github.com/Syrin-Labs/cli/issues)
|
|
330
318
|
- npm: [https://www.npmjs.com/package/@syrin/cli](https://www.npmjs.com/package/@syrin/cli)
|
|
331
319
|
|
|
332
320
|
---
|
|
333
321
|
|
|
322
|
+
## Contributing
|
|
323
|
+
|
|
324
|
+
Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) and [Code of Conduct](CODE_OF_CONDUCT.md) before submitting PRs.
|
|
325
|
+
|
|
326
|
+
For security issues, please see our [Security Policy](SECURITY.md).
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
334
330
|
## License
|
|
335
331
|
|
|
336
|
-
ISC License. See LICENSE for details.
|
|
332
|
+
ISC License. See [LICENSE](LICENSE) for details.
|
|
337
333
|
|
|
338
|
-
Made with
|
|
334
|
+
Made with care by **Syrin Labs**.
|
|
@@ -17,8 +17,8 @@ export interface DevCommandOptions {
|
|
|
17
17
|
runScript?: boolean;
|
|
18
18
|
/** Transport type override */
|
|
19
19
|
transport?: 'stdio' | 'http';
|
|
20
|
-
/** MCP URL override (for http transport) */
|
|
21
|
-
|
|
20
|
+
/** MCP server URL override (for http transport) */
|
|
21
|
+
url?: string;
|
|
22
22
|
/** Script command override (for stdio transport) */
|
|
23
23
|
script?: string;
|
|
24
24
|
}
|
package/dist/cli/commands/dev.js
CHANGED
|
@@ -60,7 +60,7 @@ export async function executeDev(options = {}) {
|
|
|
60
60
|
try {
|
|
61
61
|
const configResult = loadConfigWithGlobal(projectRoot, {
|
|
62
62
|
transport: options.transport,
|
|
63
|
-
mcp_url: options.
|
|
63
|
+
mcp_url: options.url,
|
|
64
64
|
script: options.script,
|
|
65
65
|
});
|
|
66
66
|
config = configResult.config;
|
|
@@ -82,14 +82,14 @@ export async function executeDev(options = {}) {
|
|
|
82
82
|
log.info('💡 Using global config requires CLI flags:');
|
|
83
83
|
log.info(' --transport <stdio|http>');
|
|
84
84
|
if (options.transport === 'http') {
|
|
85
|
-
log.info(' --
|
|
85
|
+
log.info(' --url <url>');
|
|
86
86
|
}
|
|
87
87
|
else if (options.transport === 'stdio') {
|
|
88
88
|
log.info(' --script <command>');
|
|
89
89
|
}
|
|
90
90
|
else {
|
|
91
91
|
// Show both options when transport is not specified
|
|
92
|
-
log.info(' --
|
|
92
|
+
log.info(' --url <url> (for http transport)');
|
|
93
93
|
log.info(' --script <command> (for stdio transport)');
|
|
94
94
|
}
|
|
95
95
|
log.blank();
|
package/dist/cli/index.js
CHANGED
|
@@ -297,7 +297,7 @@ export function setupCLI() {
|
|
|
297
297
|
.option('--event-file <path>', 'Directory path for event files (default: .syrin/events). Events are saved as {sessionId}.jsonl')
|
|
298
298
|
.option('--run-script', 'Run script to spawn server internally. If not provided, stdio uses script automatically, http connects to existing server')
|
|
299
299
|
.option('--transport <type>', 'Transport type (stdio or http). Required when using global config.')
|
|
300
|
-
.option('--
|
|
300
|
+
.option('--url <url>', 'MCP server URL (required for http transport when using global config)')
|
|
301
301
|
.option('--script <command>', 'Script command to run MCP server (required for stdio transport when using global config)')
|
|
302
302
|
.action(async (options) => {
|
|
303
303
|
try {
|
|
@@ -309,7 +309,7 @@ export function setupCLI() {
|
|
|
309
309
|
eventFile: options.eventFile,
|
|
310
310
|
runScript: options.runScript || false,
|
|
311
311
|
transport: options.transport,
|
|
312
|
-
|
|
312
|
+
url: options.url,
|
|
313
313
|
script: options.script,
|
|
314
314
|
});
|
|
315
315
|
}
|
package/dist/config/merger.js
CHANGED
|
@@ -50,7 +50,7 @@ export function createConfigFromGlobal(global, flags = {}) {
|
|
|
50
50
|
}
|
|
51
51
|
// Validate transport-specific requirements
|
|
52
52
|
if (flags.transport === 'http' && !flags.mcp_url) {
|
|
53
|
-
throw new Error('MCP URL is required for HTTP transport. Use --
|
|
53
|
+
throw new Error('MCP URL is required for HTTP transport. Use --url <url> flag.');
|
|
54
54
|
}
|
|
55
55
|
if (flags.transport === 'stdio' && !flags.script) {
|
|
56
56
|
throw new Error('Script command is required for stdio transport. Use --script <command> flag.');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@syrin/cli",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.1",
|
|
4
4
|
"description": "Syrin is a runtime intelligence system that makes MCP servers debuggable, testable, and safe to run in production.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"LICENSE"
|
|
24
24
|
],
|
|
25
25
|
"engines": {
|
|
26
|
-
"node": ">=
|
|
26
|
+
"node": ">=20.12.0"
|
|
27
27
|
},
|
|
28
28
|
"keywords": [
|
|
29
29
|
"mcp",
|
|
@@ -55,52 +55,52 @@
|
|
|
55
55
|
},
|
|
56
56
|
"repository": {
|
|
57
57
|
"type": "git",
|
|
58
|
-
"url": "git+https://github.com/
|
|
58
|
+
"url": "git+https://github.com/Syrin-Labs/cli.git"
|
|
59
59
|
},
|
|
60
60
|
"author": "Syrin Labs Team",
|
|
61
61
|
"license": "ISC",
|
|
62
62
|
"bugs": {
|
|
63
|
-
"url": "https://github.com/
|
|
63
|
+
"url": "https://github.com/Syrin-Labs/cli/issues"
|
|
64
64
|
},
|
|
65
|
-
"homepage": "https://github.com/
|
|
65
|
+
"homepage": "https://github.com/Syrin-Labs/cli#readme",
|
|
66
66
|
"publishConfig": {
|
|
67
67
|
"access": "public"
|
|
68
68
|
},
|
|
69
69
|
"devDependencies": {
|
|
70
70
|
"@types/inquirer": "^9.0.9",
|
|
71
71
|
"@types/js-yaml": "^4.0.9",
|
|
72
|
-
"@types/node": "^25.0
|
|
73
|
-
"@types/react": "^19.2.
|
|
72
|
+
"@types/node": "^25.2.0",
|
|
73
|
+
"@types/react": "^19.2.10",
|
|
74
74
|
"@types/uuid": "^10.0.0",
|
|
75
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
76
|
-
"@typescript-eslint/parser": "^8.
|
|
77
|
-
"@vitest/coverage-v8": "^
|
|
78
|
-
"@vitest/ui": "^
|
|
75
|
+
"@typescript-eslint/eslint-plugin": "^8.54.0",
|
|
76
|
+
"@typescript-eslint/parser": "^8.54.0",
|
|
77
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
78
|
+
"@vitest/ui": "^4.0.18",
|
|
79
79
|
"eslint": "^9.39.2",
|
|
80
80
|
"eslint-config-prettier": "^10.1.8",
|
|
81
81
|
"eslint-import-resolver-typescript": "^4.4.4",
|
|
82
82
|
"eslint-plugin-import": "^2.32.0",
|
|
83
|
-
"eslint-plugin-prettier": "^5.5.
|
|
84
|
-
"globals": "^17.
|
|
85
|
-
"prettier": "^3.
|
|
83
|
+
"eslint-plugin-prettier": "^5.5.5",
|
|
84
|
+
"globals": "^17.3.0",
|
|
85
|
+
"prettier": "^3.8.1",
|
|
86
86
|
"tsc-alias": "^1.8.16",
|
|
87
87
|
"tsconfig-paths": "^4.2.0",
|
|
88
88
|
"typescript": "^5.9.3",
|
|
89
|
-
"vitest": "^
|
|
89
|
+
"vitest": "^4.0.18"
|
|
90
90
|
},
|
|
91
91
|
"dependencies": {
|
|
92
|
-
"@anthropic-ai/sdk": "^0.
|
|
93
|
-
"@apidevtools/json-schema-ref-parser": "^15.
|
|
94
|
-
"@modelcontextprotocol/sdk": "^1.25.
|
|
95
|
-
"commander": "^14.0.
|
|
92
|
+
"@anthropic-ai/sdk": "^0.72.1",
|
|
93
|
+
"@apidevtools/json-schema-ref-parser": "^15.2.2",
|
|
94
|
+
"@modelcontextprotocol/sdk": "^1.25.3",
|
|
95
|
+
"commander": "^14.0.3",
|
|
96
96
|
"ink": "^6.6.0",
|
|
97
97
|
"ink-text-input": "^6.0.0",
|
|
98
|
-
"inquirer": "^13.
|
|
98
|
+
"inquirer": "^13.2.2",
|
|
99
99
|
"js-yaml": "^4.1.1",
|
|
100
100
|
"ollama": "^0.6.3",
|
|
101
|
-
"openai": "^6.
|
|
102
|
-
"react": "^19.2.
|
|
101
|
+
"openai": "^6.17.0",
|
|
102
|
+
"react": "^19.2.4",
|
|
103
103
|
"uuid": "^13.0.0",
|
|
104
|
-
"zod": "^4.3.
|
|
104
|
+
"zod": "^4.3.6"
|
|
105
105
|
}
|
|
106
106
|
}
|