@nirholas/lyra-tool-discovery 0.1.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.
Files changed (4) hide show
  1. package/CHANGELOG.md +112 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1011 -0
  4. package/package.json +120 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,112 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ### Added
11
+ - Comprehensive README documentation
12
+ - CONTRIBUTING.md guidelines
13
+ - Environment variable template (.env.example)
14
+
15
+ ### Changed
16
+ - Nothing yet
17
+
18
+ ### Fixed
19
+ - Nothing yet
20
+
21
+ ## [0.1.0] - 2024-01-15
22
+
23
+ ### Added
24
+
25
+ #### Core Features
26
+ - **Multi-provider AI support** - OpenAI (GPT-4o, GPT-4-turbo) and Anthropic (Claude Sonnet, Opus)
27
+ - **Auto-detection** of AI provider from environment variables
28
+ - **8 plugin templates** for SperaxOS integration:
29
+ - `mcp-http` - Remote MCP servers over HTTP/SSE
30
+ - `mcp-stdio` - Local MCP servers via stdio
31
+ - `openapi` - REST API integrations
32
+ - `standalone` - Full React applications
33
+ - `markdown` - Rich text/documentation plugins
34
+ - `default` - Configurable plugins with settings UI
35
+ - `settings` - User preference plugins
36
+ - `basic` - Simple function-based plugins
37
+
38
+ #### Discovery Sources
39
+ - **GitHub source** - Search repositories by topics, names, and README content
40
+ - **npm source** - Search npm registry for MCP-related packages
41
+ - Automatic detection of MCP support via `@modelcontextprotocol/sdk` dependency
42
+ - README and package.json fetching for AI analysis
43
+
44
+ #### CLI Commands
45
+ - `lyra-discover discover` - Search across configured sources
46
+ - `lyra-discover analyze-repo <owner> <repo>` - Analyze specific GitHub repository
47
+ - `lyra-discover analyze-npm <package>` - Analyze specific npm package
48
+ - `lyra-discover providers` - Show available AI providers
49
+ - `lyra-discover templates` - List all plugin templates
50
+
51
+ #### CLI Options
52
+ - `--sources, -s` - Specify discovery sources (github, npm)
53
+ - `--limit, -l` - Limit number of results
54
+ - `--dry-run, -d` - Preview without AI calls
55
+ - `--provider, -p` - Override AI provider
56
+ - `--model, -m` - Override AI model
57
+
58
+ #### Output Formats
59
+ - JSON output for CI/CD pipelines
60
+ - Quick Import format for SperaxOS
61
+ - Console output with rich formatting
62
+ - Plugin manifests for plugin.delivery
63
+
64
+ ### Technical Details
65
+ - Built with TypeScript 5.7
66
+ - Uses Commander.js for CLI
67
+ - OpenAI SDK for GPT models
68
+ - Anthropic SDK for Claude models
69
+ - ESM module format
70
+
71
+ ---
72
+
73
+ ## Version History
74
+
75
+ | Version | Date | Description |
76
+ |---------|------|-------------|
77
+ | 0.1.0 | 2024-01-15 | Initial release |
78
+
79
+ ---
80
+
81
+ ## Upcoming Features
82
+
83
+ Features planned for future releases:
84
+
85
+ ### v0.2.0
86
+ - [ ] Configuration file support (`discovery.config.json`)
87
+ - [ ] Output to file option (`--output`)
88
+ - [ ] Filter by minimum stars
89
+ - [ ] Filter by license type
90
+
91
+ ### v0.3.0
92
+ - [ ] Smithery source integration
93
+ - [ ] OpenAPI Directory source
94
+ - [ ] Batch processing mode
95
+ - [ ] Caching for repeated analyses
96
+
97
+ ### v0.4.0
98
+ - [ ] Plugin manifest generation
99
+ - [ ] Automatic PR creation for plugin.delivery
100
+ - [ ] GitHub Action for scheduled discovery
101
+ - [ ] Webhook notifications
102
+
103
+ ### v1.0.0
104
+ - [ ] Stable API
105
+ - [ ] Comprehensive test suite
106
+ - [ ] Full documentation
107
+ - [ ] Production-ready error handling
108
+
109
+ ---
110
+
111
+ [Unreleased]: https://github.com/nirholas/lyra-tool-discovery/compare/v0.1.0...HEAD
112
+ [0.1.0]: https://github.com/nirholas/lyra-tool-discovery/releases/tag/v0.1.0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024-2026 nirholas
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,1011 @@
1
+ <div align="center">
2
+
3
+ # 🔮 Lyra Tool Discovery
4
+
5
+ **AI-powered tool discovery for the MCP ecosystem**
6
+
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue?style=flat-square&logo=typescript)](https://www.typescriptlang.org/)
8
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg?style=flat-square)](https://opensource.org/licenses/MIT)
9
+ [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)
10
+ [![AI Powered](https://img.shields.io/badge/AI-OpenAI%20%7C%20Anthropic-blueviolet?style=flat-square)](https://openai.com)
11
+
12
+ [Documentation](https://github.com/nirholas/lyra-tool-discovery/tree/main/docs) · [CLI Reference](#-cli-reference) · [Examples](#-examples) · [Contributing](#-contributing)
13
+
14
+ </div>
15
+
16
+ ---
17
+
18
+ ## 📖 Overview
19
+
20
+ **Lyra Tool Discovery** is an AI-powered automation tool designed specifically for the **crypto, DeFi, blockchain, and web3 ecosystem**. It solves the painful problem of manually discovering, evaluating, and integrating MCP (Model Context Protocol) servers into your crypto-focused applications. Instead of spending hours searching GitHub, reading READMEs, and figuring out the right integration approach, Lyra does it for you in seconds.
21
+
22
+ The tool crawls multiple sources—GitHub and npm—to find crypto-related MCP servers, APIs, and plugins. It filters results to focus exclusively on **blockchain, DeFi, web3, and cryptocurrency tooling** (including Ethereum, Solana, Bitcoin, wallets, tokens, NFTs, DEXs, staking, bridges, and more). Lyra then leverages state-of-the-art AI (OpenAI GPT-4o or Anthropic Claude) to analyze each discovered tool and automatically generates ready-to-use plugin configurations.
23
+
24
+ ### 🪙 Crypto Focus
25
+
26
+ Lyra is optimized for discovering tools related to:
27
+
28
+ - **Blockchain Networks** — Ethereum, Solana, Bitcoin, Layer 2s, bridges
29
+ - **DeFi Protocols** — DEXs, lending, staking, yield farming, liquidity
30
+ - **Web3 Infrastructure** — Wallets, RPC providers, indexers, oracles
31
+ - **Token Standards** — ERC-20, ERC-721, NFTs, token swaps
32
+ - **Smart Contracts** — Development, auditing, deployment tools
33
+ - **On-chain Data** — Analytics, explorers, transaction tracking
34
+
35
+ Lyra is built for **crypto MCP ecosystem developers** who need to rapidly onboard new tools, **plugin marketplace operators** like plugin.delivery who curate crypto plugins, and **automation engineers** building CI/CD pipelines for DeFi tool discovery and deployment.
36
+
37
+ This tool is a critical piece of the discovery-to-deployment pipeline: `lyra-tool-discovery` → `github-to-mcp` → `plugin.delivery` → **SperaxOS users**. By automating the discovery and classification phase, Lyra enables fully automated plugin onboarding with minimal human intervention.
38
+
39
+ ---
40
+
41
+ ## ✨ Features
42
+
43
+ <table>
44
+ <tr>
45
+ <td width="50%">
46
+
47
+ ### 🤖 Multi-Provider AI
48
+
49
+ - **OpenAI** — GPT-4o, GPT-4-turbo, GPT-3.5-turbo
50
+ - **Anthropic** — Claude Sonnet 4, Claude Opus
51
+ - Auto-detection from environment variables
52
+ - Custom model selection via CLI or config
53
+ - Intelligent fallback between providers
54
+
55
+ </td>
56
+ <td width="50%">
57
+
58
+ ### 📦 8 Plugin Templates
59
+
60
+ - `mcp-http` — Remote MCP servers (HTTP/SSE)
61
+ - `mcp-stdio` — Local MCP servers (stdio)
62
+ - `openapi` — REST API integrations
63
+ - `standalone` — Full React applications
64
+ - `markdown` — Rich text/documentation
65
+ - `default` — Configurable plugins
66
+ - `settings` — User preference plugins
67
+ - `basic` — Simple function plugins
68
+
69
+ </td>
70
+ </tr>
71
+ <tr>
72
+ <td width="50%">
73
+
74
+ ### 🔍 Discovery Sources
75
+
76
+ - **GitHub** — Search repos, topics, READMEs
77
+ - **npm** — Package registry search
78
+ - 🔜 Smithery (MCP directory)
79
+ - 🔜 OpenAPI Directory
80
+ - 🔜 RapidAPI
81
+
82
+ </td>
83
+ <td width="50%">
84
+
85
+ ### 🪙 Crypto Filtering
86
+
87
+ - **Keywords** — crypto, defi, blockchain, web3
88
+ - **Networks** — ethereum, solana, bitcoin
89
+ - **Protocols** — wallet, token, nft, dex, staking
90
+ - **Age Filter** — Only repos updated within 12 months
91
+ - **Smart Validation** — AI validates crypto relevance
92
+
93
+ - Full-featured command-line interface
94
+ - Node.js/TypeScript SDK for automation
95
+ - JSON output for CI/CD pipelines
96
+ - Dry-run mode for testing
97
+ - Progress indicators and rich output
98
+
99
+ </td>
100
+ </tr>
101
+ <tr>
102
+ <td width="50%">
103
+
104
+ ### 🖥️ CLI & Programmatic API
105
+
106
+ - Full-featured command-line interface
107
+ - Node.js/TypeScript SDK for automation
108
+ - JSON output for CI/CD pipelines
109
+ - Dry-run mode for testing
110
+ - Progress indicators and rich output
111
+
112
+ </td>
113
+ <td width="50%">
114
+
115
+ ### 🧪 Testing & Validation
116
+
117
+ - `--dry-run` mode for safe testing
118
+ - List discovered tools without AI calls
119
+ - Validate configurations before deployment
120
+ - Debug logging for troubleshooting
121
+
122
+ </td>
123
+ </tr>
124
+ <tr>
125
+ <td width="50%">
126
+
127
+ ### 📤 Flexible Output
128
+
129
+ - Structured JSON for piping to other tools
130
+ - Quick Import format for SperaxOS
131
+ - Plugin manifests for plugin.delivery
132
+ - Console output with rich formatting
133
+
134
+ </td>
135
+ </tr>
136
+ </table>
137
+
138
+ ---
139
+
140
+ ## 🪙 Crypto Discovery Keywords
141
+
142
+ Lyra automatically filters discovery results to focus on crypto/DeFi/blockchain/web3 tools. The following keywords are used for both search queries and result validation:
143
+
144
+ <details>
145
+ <summary><strong>View all supported keywords</strong></summary>
146
+
147
+ | Category | Keywords |
148
+ |----------|----------|
149
+ | **General** | crypto, cryptocurrency, defi, blockchain, web3 |
150
+ | **Networks** | ethereum, eth, solana, sol, bitcoin, btc, chain |
151
+ | **Tokens** | token, erc20, erc721, nft |
152
+ | **DeFi** | dex, swap, staking, yield, lending, liquidity, vault, bridge |
153
+ | **Infrastructure** | wallet, protocol, onchain, on-chain, smart contract |
154
+ | **Libraries** | web3.js, ethers, viem, wagmi, rainbowkit |
155
+ | **Protocols** | uniswap, aave, compound |
156
+
157
+ </details>
158
+
159
+ Tools that don't match any of these keywords are automatically filtered out, ensuring you only discover crypto-relevant MCP servers.
160
+
161
+ ### Age Filtering
162
+
163
+ By default, Lyra only discovers tools that have been updated within the **last 12 months**. This ensures you're finding actively maintained projects. Use `--max-age` to adjust:
164
+
165
+ ```bash
166
+ # Only tools updated in the last 6 months
167
+ lyra-discover discover --max-age 6
168
+
169
+ # Only tools updated in the last 3 months (bleeding edge)
170
+ lyra-discover discover --max-age 3
171
+
172
+ # Tools up to 24 months old
173
+ lyra-discover discover --max-age 24
174
+ ```
175
+
176
+ ---
177
+
178
+ ## Quick Start
179
+
180
+ ### Installation
181
+
182
+ ```bash
183
+ # Global install (recommended for CLI usage)
184
+ pnpm add -g @nirholas/lyra-tool-discovery
185
+
186
+ # Or with npm
187
+ npm install -g @nirholas/lyra-tool-discovery
188
+
189
+ # Or as a project dependency
190
+ pnpm add @nirholas/lyra-tool-discovery
191
+
192
+ # Or run directly with npx (no install)
193
+ npx @nirholas/lyra-tool-discovery discover --help
194
+ ```
195
+
196
+ ### Environment Setup
197
+
198
+ ```bash
199
+ # Using OpenAI (default when both keys present)
200
+ export OPENAI_API_KEY="sk-..."
201
+
202
+ # Or using Anthropic
203
+ export ANTHROPIC_API_KEY="sk-ant-..."
204
+
205
+ # Optional: Force a specific provider
206
+ export AI_PROVIDER="anthropic" # or "openai"
207
+
208
+ # Optional: Specify a model
209
+ export AI_MODEL="claude-sonnet-4-20250514"
210
+
211
+ # Optional: GitHub token for higher rate limits
212
+ export GITHUB_TOKEN="ghp_..."
213
+ ```
214
+
215
+ ### First Discovery
216
+
217
+ ```bash
218
+ # Discover MCP servers from GitHub and npm
219
+ lyra-discover discover --sources github,npm --limit 10
220
+
221
+ # Run in dry-run mode (no AI calls)
222
+ lyra-discover discover --dry-run --limit 20
223
+
224
+ # Analyze a specific GitHub repository
225
+ lyra-discover analyze-repo anthropics claude-mcp
226
+
227
+ # Analyze an npm package
228
+ lyra-discover analyze-npm @modelcontextprotocol/server-github
229
+
230
+ # Check available AI providers
231
+ lyra-discover providers
232
+
233
+ # View all plugin templates
234
+ lyra-discover templates
235
+ ```
236
+
237
+ ---
238
+
239
+ ## 📖 CLI Reference
240
+
241
+ ### Global Options
242
+
243
+ | Flag | Alias | Description | Default |
244
+ |------|-------|-------------|---------|
245
+ | `--provider` | `-p` | AI provider (`openai` or `anthropic`) | Auto-detect from env |
246
+ | `--model` | `-m` | AI model to use | Provider default |
247
+ | `--version` | `-V` | Show version number | — |
248
+ | `--help` | `-h` | Show help | — |
249
+
250
+ ### Commands
251
+
252
+ #### `discover`
253
+
254
+ Search for MCP tools and APIs across configured sources.
255
+
256
+ ```bash
257
+ lyra-discover discover [options]
258
+ ```
259
+
260
+ | Option | Alias | Description | Default |
261
+ |--------|-------|-------------|---------|
262
+ | `--sources` | `-s` | Comma-separated sources: `github`, `npm`, `awesome-list` | `github,npm` |
263
+ | `--limit` | `-l` | Maximum tools to discover per source | `5` |
264
+ | `--max-age` | `-a` | Maximum age in months for discovered repos | `12` |
265
+ | `--dry-run` | `-d` | List tools without AI analysis | `false` |
266
+ | `--provider` | `-p` | AI provider to use | Auto-detect |
267
+ | `--model` | `-m` | AI model to use | Provider default |
268
+
269
+ **Examples:**
270
+
271
+ ```bash
272
+ # Discover crypto MCP tools from GitHub only, limit 10 results
273
+ lyra-discover discover --sources github --limit 10
274
+
275
+ # Find tools updated in the last 6 months only
276
+ lyra-discover discover --max-age 6 --limit 20
277
+
278
+ # Dry run to preview what would be analyzed
279
+ lyra-discover discover --dry-run --sources npm --limit 20
280
+
281
+ # Use Anthropic Claude for analysis
282
+ lyra-discover discover --provider anthropic --model claude-sonnet-4-20250514
283
+
284
+ # Use OpenAI GPT-4o for analysis
285
+ lyra-discover discover --provider openai --model gpt-4o
286
+ ```
287
+
288
+ **Example Output:**
289
+
290
+ ```
291
+ 🔍 Discovering crypto/DeFi/web3 tools from: github, npm
292
+ 📅 Max age: 12 months
293
+ Found 5 from github
294
+ Found 3 from npm
295
+
296
+ 📊 Total discovered: 8 tools
297
+ 🪙 Crypto-related: 6 tools
298
+ 🔌 MCP-compatible: 5 tools
299
+
300
+ 🤖 Analyzing: mcp-server-ethereum...
301
+ Template: mcp-stdio
302
+ Reasoning: Has MCP SDK dependency and bin entry for local execution
303
+
304
+ ✅ Analyzed 5 tools
305
+
306
+ 📦 Generated Configs:
307
+
308
+ --- mcp-server-ethereum ---
309
+ Template: mcp-stdio
310
+ Config: {
311
+ "identifier": "mcp-server-ethereum",
312
+ "customParams": {
313
+ "mcp": {
314
+ "type": "stdio",
315
+ "command": "npx",
316
+ "args": ["-y", "mcp-server-ethereum"]
317
+ }
318
+ }
319
+ }
320
+ ```
321
+
322
+ ---
323
+
324
+ #### `analyze-repo`
325
+
326
+ Analyze a specific GitHub repository.
327
+
328
+ ```bash
329
+ lyra-discover analyze-repo <owner> <repo> [options]
330
+ ```
331
+
332
+ | Argument | Description |
333
+ |----------|-------------|
334
+ | `owner` | GitHub repository owner/organization |
335
+ | `repo` | Repository name |
336
+
337
+ | Option | Alias | Description |
338
+ |--------|-------|-------------|
339
+ | `--provider` | `-p` | AI provider to use |
340
+ | `--model` | `-m` | AI model to use |
341
+
342
+ **Examples:**
343
+
344
+ ```bash
345
+ # Analyze the official MCP GitHub server
346
+ lyra-discover analyze-repo modelcontextprotocol servers
347
+
348
+ # Analyze with specific model
349
+ lyra-discover analyze-repo anthropics claude-mcp --model gpt-4o
350
+
351
+ # Analyze a community MCP server
352
+ lyra-discover analyze-repo punkpeye mcp-server-obsidian
353
+ ```
354
+
355
+ **Example Output:**
356
+
357
+ ```
358
+ 🔍 Fetching modelcontextprotocol/servers...
359
+ 🤖 Analyzing...
360
+
361
+ ✅ Analysis complete:
362
+ Template: mcp-stdio
363
+ Reasoning: Repository contains multiple MCP servers with bin entries, using @modelcontextprotocol/sdk
364
+
365
+ 📋 Quick Import JSON:
366
+ {
367
+ "mcpServers": {
368
+ "github": {
369
+ "command": "npx",
370
+ "args": ["-y", "@modelcontextprotocol/server-github"]
371
+ }
372
+ }
373
+ }
374
+ ```
375
+
376
+ ---
377
+
378
+ #### `analyze-npm`
379
+
380
+ Analyze a specific npm package.
381
+
382
+ ```bash
383
+ lyra-discover analyze-npm <package> [options]
384
+ ```
385
+
386
+ | Argument | Description |
387
+ |----------|-------------|
388
+ | `package` | npm package name (with or without scope) |
389
+
390
+ | Option | Alias | Description |
391
+ |--------|-------|-------------|
392
+ | `--provider` | `-p` | AI provider to use |
393
+ | `--model` | `-m` | AI model to use |
394
+
395
+ **Examples:**
396
+
397
+ ```bash
398
+ # Analyze official MCP server packages
399
+ lyra-discover analyze-npm @modelcontextprotocol/server-github
400
+ lyra-discover analyze-npm @modelcontextprotocol/server-filesystem
401
+ lyra-discover analyze-npm @modelcontextprotocol/server-slack
402
+
403
+ # Analyze community packages
404
+ lyra-discover analyze-npm mcp-server-sqlite
405
+ ```
406
+
407
+ ---
408
+
409
+ #### `providers`
410
+
411
+ Show available AI providers based on configured environment variables.
412
+
413
+ ```bash
414
+ lyra-discover providers
415
+ ```
416
+
417
+ **Example Output (with keys configured):**
418
+
419
+ ```
420
+ 🤖 AI Provider Configuration
421
+
422
+ Available providers (based on env vars):
423
+ ✅ openai
424
+ ✅ anthropic
425
+
426
+ Override with env vars or CLI flags:
427
+ AI_PROVIDER=openai|anthropic
428
+ AI_MODEL=gpt-4o|claude-sonnet-4-20250514|etc.
429
+ --provider openai --model gpt-4o
430
+ ```
431
+
432
+ **Example Output (no keys):**
433
+
434
+ ```
435
+ 🤖 AI Provider Configuration
436
+
437
+ Available providers (based on env vars):
438
+ ⚠️ No API keys found!
439
+
440
+ Set one of these environment variables:
441
+ - OPENAI_API_KEY → Use OpenAI (gpt-4o, gpt-4-turbo, etc.)
442
+ - ANTHROPIC_API_KEY → Use Anthropic (claude-sonnet-4-20250514, etc.)
443
+ ```
444
+
445
+ ---
446
+
447
+ #### `templates`
448
+
449
+ Display all available plugin templates with descriptions.
450
+
451
+ ```bash
452
+ lyra-discover templates
453
+ ```
454
+
455
+ **Output:**
456
+
457
+ ```
458
+ ╔═══════════════════════════════════════════════════════════════════════════════╗
459
+ ║ plugin.delivery Plugin Templates ║
460
+ ╠════════════╦════════════╦═══════════════════════════════════════════════════════╣
461
+ ║ Template ║ Type ║ Description ║ Use Case ║
462
+ ╠════════════╬════════════╬═══════════════════════════════╬════════════════════╣
463
+ ║ basic ║ Default ║ Standard plugin with API ║ Simple data lookups║
464
+ ║ default ║ Default ║ Plugin with settings UI ║ Configurable tools ║
465
+ ║ markdown ║ Markdown ║ Rich text output ║ Formatted reports ║
466
+ ║ openapi ║ OpenAPI ║ Auto-generated from spec ║ Existing APIs ║
467
+ ║ settings ║ Default ║ Plugin with user preferences ║ Personalized tools ║
468
+ ║ standalone ║ Standalone ║ Full React application ║ Interactive UIs ║
469
+ ╠════════════╬════════════╬═══════════════════════════════╬════════════════════╣
470
+ ║ mcp-http ║ MCP ║ Streamable HTTP MCP server ║ Remote MCP tools ║
471
+ ║ mcp-stdio ║ MCP ║ STDIO-based MCP server ║ Local npm MCP ║
472
+ ╚════════════╩════════════╩═══════════════════════════════╩════════════════════╝
473
+ ```
474
+
475
+ ---
476
+
477
+ ## 🔧 Programmatic API
478
+
479
+ Use Lyra as a library in your Node.js/TypeScript projects:
480
+
481
+ ```typescript
482
+ import {
483
+ ToolDiscovery,
484
+ GitHubSource,
485
+ NpmSource,
486
+ AIAnalyzer
487
+ } from '@nirholas/lyra-tool-discovery';
488
+
489
+ // Initialize with default settings (auto-detect AI provider)
490
+ const discovery = new ToolDiscovery();
491
+
492
+ // Or with specific configuration
493
+ const discovery = new ToolDiscovery({
494
+ provider: 'anthropic',
495
+ model: 'claude-sonnet-4-20250514',
496
+ apiKey: process.env.ANTHROPIC_API_KEY // Optional, uses env var by default
497
+ });
498
+
499
+ // Discover from all sources
500
+ const results = await discovery.discover({
501
+ sources: ['github', 'npm'],
502
+ limit: 20,
503
+ dryRun: false
504
+ });
505
+
506
+ // Process results
507
+ for (const result of results) {
508
+ console.log(`Tool: ${result.tool.name}`);
509
+ console.log(`Template: ${result.decision.template}`);
510
+ console.log(`Config:`, result.generated.pluginConfig);
511
+ }
512
+
513
+ // Analyze a specific GitHub repo
514
+ const repoResult = await discovery.analyzeGitHubRepo('owner', 'repo');
515
+ console.log(repoResult?.decision.template);
516
+
517
+ // Analyze a specific npm package
518
+ const npmResult = await discovery.analyzeNpmPackage('@scope/package-name');
519
+ console.log(npmResult?.decision.template);
520
+ ```
521
+
522
+ ### Using Individual Components
523
+
524
+ ```typescript
525
+ import { GitHubSource, NpmSource, AIAnalyzer } from '@nirholas/lyra-tool-discovery';
526
+
527
+ // Use GitHub source directly
528
+ const github = new GitHubSource(process.env.GITHUB_TOKEN);
529
+ const mcpTools = await github.searchMCPServers(10);
530
+ const openApiTools = await github.searchOpenAPISpecs(10);
531
+ const specificRepo = await github.getRepo('owner', 'repo');
532
+
533
+ // Use npm source directly
534
+ const npm = new NpmSource();
535
+ const npmTools = await npm.searchMCPServers(10);
536
+ const specificPackage = await npm.getPackageAsTool('@modelcontextprotocol/server-github');
537
+
538
+ // Use AI analyzer directly
539
+ const ai = new AIAnalyzer({ provider: 'openai', model: 'gpt-4o' });
540
+ const decision = await ai.analyzeAndDecide(discoveredTool);
541
+ const quickImport = ai.generateQuickImport(decision);
542
+ ```
543
+
544
+ ### Type Definitions
545
+
546
+ ```typescript
547
+ import type {
548
+ // Discovery types
549
+ DiscoveredTool,
550
+ DiscoveryResult,
551
+ DiscoverySource,
552
+
553
+ // Template types
554
+ PluginTemplate,
555
+ TemplateDecision,
556
+
557
+ // MCP types
558
+ MCPConnection,
559
+ MCPHttpConnection,
560
+ MCPStdioConnection,
561
+ MCPAuthConfig,
562
+
563
+ // Plugin types
564
+ CustomPlugin,
565
+ PluginManifest,
566
+ PluginIndexEntry,
567
+ MCPQuickImportConfig
568
+ } from '@nirholas/lyra-tool-discovery';
569
+ ```
570
+
571
+ ---
572
+
573
+ ## 🏗️ Architecture
574
+
575
+ ```
576
+ ┌─────────────────────────────────────────────────────────────────────────────┐
577
+ │ LYRA TOOL DISCOVERY │
578
+ ├─────────────────────────────────────────────────────────────────────────────┤
579
+ │ │
580
+ │ ┌────────────────┐ ┌────────────────┐ ┌────────────────────────┐ │
581
+ │ │ Sources │ │ AI Analyzer │ │ Template Engine │ │
582
+ │ ├────────────────┤ ├────────────────┤ ├────────────────────────┤ │
583
+ │ │ │ │ │ │ │ │
584
+ │ │ • GitHub API │────▶│ • OpenAI │────▶│ • basic │ │
585
+ │ │ - Repos │ │ - GPT-4o │ │ • default │ │
586
+ │ │ - Topics │ │ - GPT-4-turbo│ │ • markdown │ │
587
+ │ │ - READMEs │ │ │ │ • openapi │ │
588
+ │ │ │ │ • Anthropic │ │ • settings │ │
589
+ │ │ • npm Registry │ │ - Claude │ │ • standalone │ │
590
+ │ │ - Packages │ │ - Sonnet │ │ • mcp-http │ │
591
+ │ │ - Keywords │ │ - Opus │ │ • mcp-stdio │ │
592
+ │ │ │ │ │ │ │ │
593
+ │ └────────────────┘ └────────────────┘ └────────────────────────┘ │
594
+ │ │ │ │ │
595
+ │ │ │ │ │
596
+ │ ▼ ▼ ▼ │
597
+ │ ┌─────────────────────────────────────────────────────────────────────┐ │
598
+ │ │ Discovery Result │ │
599
+ │ ├─────────────────────────────────────────────────────────────────────┤ │
600
+ │ │ { │ │
601
+ │ │ tool: DiscoveredTool, // Source metadata │ │
602
+ │ │ decision: TemplateDecision, // AI analysis result │ │
603
+ │ │ generated: { │ │
604
+ │ │ pluginConfig: CustomPlugin | PluginIndexEntry │ │
605
+ │ │ } │ │
606
+ │ │ } │ │
607
+ │ └─────────────────────────────────────────────────────────────────────┘ │
608
+ │ │ │
609
+ │ ▼ │
610
+ │ ┌───────────────────────────────┐ │
611
+ │ │ Output Formats │ │
612
+ │ ├───────────────────────────────┤ │
613
+ │ │ • JSON (for pipelines) │ │
614
+ │ │ • Quick Import (SperaxOS) │ │
615
+ │ │ • Plugin Manifests │ │
616
+ │ │ • Console (human-readable) │ │
617
+ │ └───────────────────────────────┘ │
618
+ └─────────────────────────────────────────────────────────────────────────────┘
619
+ ```
620
+
621
+ ---
622
+
623
+ ## 📋 Plugin Templates
624
+
625
+ Lyra analyzes tools and automatically selects from 8 plugin templates:
626
+
627
+ | Template | Transport | Type | Use Case | AI Selection Criteria |
628
+ |----------|-----------|------|----------|----------------------|
629
+ | `mcp-http` | HTTP/SSE | MCP | Remote MCP servers | Has MCP SDK + HTTP server code, publicly accessible URL |
630
+ | `mcp-stdio` | stdio | MCP | Local MCP servers | Has MCP SDK + `bin` entry in package.json, runs via npx |
631
+ | `openapi` | HTTP | OpenAPI | REST API integrations | Has OpenAPI/Swagger spec file or documentation |
632
+ | `standalone` | — | Standalone | Interactive applications | Needs complex UI, React components, data visualization |
633
+ | `markdown` | — | Markdown | Documentation/content | Outputs formatted text, reports, documentation |
634
+ | `default` | — | Default | Configurable plugins | Needs settings UI, configuration options |
635
+ | `settings` | — | Default | User preferences | Stores user preferences, personalization |
636
+ | `basic` | — | Default | Simple functions | Simple data lookups, basic API calls |
637
+
638
+ ### AI Decision Priority
639
+
640
+ The AI follows this priority order when selecting templates:
641
+
642
+ 1. **MCP Detection** → If tool uses `@modelcontextprotocol/sdk`:
643
+ - Has HTTP server → `mcp-http`
644
+ - Has bin entry → `mcp-stdio`
645
+ 2. **OpenAPI Detection** → If has `openapi.json/yaml` or Swagger spec → `openapi`
646
+ 3. **Complex UI** → If needs interactive dashboard → `standalone`
647
+ 4. **Formatted Output** → If outputs rich text/markdown → `markdown`
648
+ 5. **Configuration** → If needs user settings → `default` or `settings`
649
+ 6. **Default** → Simple function → `basic`
650
+
651
+ ---
652
+
653
+ ## 🔗 Integration Pipeline
654
+
655
+ Lyra Tool Discovery is part of a larger automation toolchain for the SperaxOS ecosystem:
656
+
657
+ ```
658
+ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
659
+ │ │ │ │ │ │ │ │
660
+ │ lyra-discover │────▶│ github-to-mcp │────▶│ plugin.delivery │────▶│ SperaxOS │
661
+ │ │ │ │ │ │ │ │
662
+ │ Discovery & │ │ Conversion │ │ Marketplace │ │ End Users │
663
+ │ Analysis │ │ │ │ │ │ │
664
+ └─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘
665
+ ```
666
+
667
+ 1. **Discovery** (this tool) — Finds tools on GitHub/npm, analyzes with AI, generates configs
668
+ 2. **Conversion** — [github-to-mcp](https://github.com/nirholas/github-to-mcp) converts repos to MCP servers
669
+ 3. **Registry** — [plugin.delivery](https://plugin.delivery) hosts the plugin marketplace
670
+ 4. **Consumption** — SperaxOS users discover and install plugins
671
+
672
+ ### Automated PR Workflow
673
+
674
+ You can set up a GitHub Action to automate the entire pipeline:
675
+
676
+ ```yaml
677
+ # .github/workflows/discover-tools.yml
678
+ name: Discover New Tools
679
+
680
+ on:
681
+ schedule:
682
+ - cron: '0 0 * * *' # Daily at midnight
683
+ workflow_dispatch:
684
+
685
+ jobs:
686
+ discover:
687
+ runs-on: ubuntu-latest
688
+ steps:
689
+ - uses: actions/checkout@v4
690
+
691
+ - name: Setup Node.js
692
+ uses: actions/setup-node@v4
693
+ with:
694
+ node-version: '20'
695
+
696
+ - name: Install Lyra
697
+ run: npm install -g @nirholas/lyra-tool-discovery
698
+
699
+ - name: Discover new MCP servers
700
+ env:
701
+ OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
702
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
703
+ run: |
704
+ lyra-discover discover \
705
+ --sources github,npm \
706
+ --limit 50 \
707
+ > discovered-tools.json
708
+
709
+ - name: Create PR with new tools
710
+ uses: peter-evans/create-pull-request@v5
711
+ with:
712
+ title: '🔮 New tools discovered by Lyra'
713
+ body: 'Automated discovery run found new MCP servers and APIs.'
714
+ branch: lyra/discovered-tools
715
+ ```
716
+
717
+ ---
718
+
719
+ ## ⚙️ Configuration
720
+
721
+ ### Environment Variables
722
+
723
+ | Variable | Description | Example |
724
+ |----------|-------------|---------|
725
+ | `OPENAI_API_KEY` | OpenAI API key | `sk-...` |
726
+ | `ANTHROPIC_API_KEY` | Anthropic API key | `sk-ant-...` |
727
+ | `AI_PROVIDER` | Force specific provider | `openai` or `anthropic` |
728
+ | `AI_MODEL` | Override default model | `gpt-4o`, `claude-sonnet-4-20250514` |
729
+ | `GITHUB_TOKEN` | GitHub token for higher rate limits | `ghp_...` |
730
+
731
+ ### Configuration File (Coming Soon)
732
+
733
+ Support for `discovery.config.json`:
734
+
735
+ ```json
736
+ {
737
+ "sources": {
738
+ "github": {
739
+ "enabled": true,
740
+ "searchQueries": [
741
+ "mcp server in:name,description",
742
+ "modelcontextprotocol in:readme",
743
+ "@modelcontextprotocol in:readme"
744
+ ],
745
+ "minStars": 10
746
+ },
747
+ "npm": {
748
+ "enabled": true,
749
+ "keywords": ["mcp", "model-context-protocol", "mcp-server"],
750
+ "scopes": ["@modelcontextprotocol"]
751
+ }
752
+ },
753
+ "ai": {
754
+ "provider": "anthropic",
755
+ "model": "claude-sonnet-4-20250514",
756
+ "maxTokens": 4096
757
+ },
758
+ "output": {
759
+ "format": "json",
760
+ "path": "./data/discovered-tools.json",
761
+ "includeMetadata": true
762
+ },
763
+ "filters": {
764
+ "requireMCPSupport": true,
765
+ "requireLicense": true,
766
+ "excludeArchived": true
767
+ }
768
+ }
769
+ ```
770
+
771
+ ---
772
+
773
+ ## 📚 Examples
774
+
775
+ ### Example 1: Discover and Save Results
776
+
777
+ ```bash
778
+ # Discover tools and save to file
779
+ lyra-discover discover --sources github,npm --limit 20 > tools.json
780
+
781
+ # Parse with jq
782
+ cat tools.json | jq '.[] | {name: .tool.name, template: .decision.template}'
783
+ ```
784
+
785
+ ### Example 2: Batch Analyze Repositories
786
+
787
+ ```bash
788
+ # Create a list of repos to analyze
789
+ repos=(
790
+ "modelcontextprotocol/servers"
791
+ "anthropics/claude-mcp"
792
+ "punkpeye/mcp-server-obsidian"
793
+ )
794
+
795
+ # Analyze each repo
796
+ for repo in "${repos[@]}"; do
797
+ owner=$(echo $repo | cut -d'/' -f1)
798
+ name=$(echo $repo | cut -d'/' -f2)
799
+ lyra-discover analyze-repo $owner $name
800
+ echo "---"
801
+ done
802
+ ```
803
+
804
+ ### Example 3: Analyze npm Packages in CI
805
+
806
+ ```typescript
807
+ // scripts/analyze-packages.ts
808
+ import { ToolDiscovery } from '@nirholas/lyra-tool-discovery';
809
+
810
+ const packages = [
811
+ '@modelcontextprotocol/server-github',
812
+ '@modelcontextprotocol/server-filesystem',
813
+ '@modelcontextprotocol/server-slack',
814
+ ];
815
+
816
+ async function main() {
817
+ const discovery = new ToolDiscovery({ provider: 'openai' });
818
+
819
+ for (const pkg of packages) {
820
+ const result = await discovery.analyzeNpmPackage(pkg);
821
+ if (result) {
822
+ console.log(JSON.stringify({
823
+ package: pkg,
824
+ template: result.decision.template,
825
+ config: result.generated.pluginConfig
826
+ }, null, 2));
827
+ }
828
+ }
829
+ }
830
+
831
+ main();
832
+ ```
833
+
834
+ ### Example 4: Custom Source Integration
835
+
836
+ ```typescript
837
+ import { AIAnalyzer, type DiscoveredTool } from '@nirholas/lyra-tool-discovery';
838
+
839
+ // Create a custom discovered tool
840
+ const customTool: DiscoveredTool = {
841
+ id: 'custom:my-tool',
842
+ name: 'my-custom-mcp-server',
843
+ description: 'A custom MCP server for my application',
844
+ source: 'github',
845
+ sourceUrl: 'https://github.com/myorg/my-tool',
846
+ hasMCPSupport: true,
847
+ hasNpmPackage: true,
848
+ readme: '# My Tool\n\nAn MCP server that does X, Y, Z...',
849
+ packageJson: {
850
+ name: 'my-custom-mcp-server',
851
+ bin: { 'my-mcp': './dist/cli.js' },
852
+ dependencies: { '@modelcontextprotocol/sdk': '^1.0.0' }
853
+ }
854
+ };
855
+
856
+ // Analyze with AI
857
+ const ai = new AIAnalyzer({ provider: 'anthropic' });
858
+ const decision = await ai.analyzeAndDecide(customTool);
859
+ console.log(`Template: ${decision.template}`);
860
+ console.log(`Reasoning: ${decision.reasoning}`);
861
+ ```
862
+
863
+ ### Example 5: Dry Run with Filtering
864
+
865
+ ```bash
866
+ # Discover in dry-run mode to see what would be analyzed
867
+ lyra-discover discover --dry-run --sources github --limit 50
868
+
869
+ # Output:
870
+ # [DRY RUN] Would analyze: mcp-server-github
871
+ # Source: github
872
+ # URL: https://github.com/modelcontextprotocol/servers
873
+ # MCP: Yes
874
+ # [DRY RUN] Would analyze: claude-mcp
875
+ # Source: github
876
+ # URL: https://github.com/anthropics/claude-mcp
877
+ # MCP: Yes
878
+ # ...
879
+ ```
880
+
881
+ ### Example 6: Generate Quick Import for SperaxOS
882
+
883
+ ```typescript
884
+ import { ToolDiscovery } from '@nirholas/lyra-tool-discovery';
885
+
886
+ const discovery = new ToolDiscovery();
887
+ const result = await discovery.analyzeNpmPackage('@modelcontextprotocol/server-github');
888
+
889
+ // The quick import format can be directly pasted into SperaxOS
890
+ console.log(`Add this to your MCP configuration:`);
891
+ console.log(JSON.stringify({
892
+ mcpServers: {
893
+ [result.tool.name]: result.decision.config.customParams?.mcp
894
+ }
895
+ }, null, 2));
896
+ ```
897
+
898
+ ---
899
+
900
+ ## 🤝 Contributing
901
+
902
+ We welcome contributions! Here's how to get started:
903
+
904
+ ### Development Setup
905
+
906
+ ```bash
907
+ # Clone the repository
908
+ git clone https://github.com/nirholas/lyra-tool-discovery.git
909
+ cd lyra-tool-discovery
910
+
911
+ # Install dependencies
912
+ pnpm install
913
+
914
+ # Set up environment
915
+ cp .env.example .env
916
+ # Edit .env with your API keys
917
+
918
+ # Run in development mode
919
+ pnpm dev discover --dry-run
920
+
921
+ # Build
922
+ pnpm build
923
+
924
+ # Run tests
925
+ pnpm test
926
+ ```
927
+
928
+ ### Code Style
929
+
930
+ - We use **TypeScript** with strict mode
931
+ - **ESLint** for linting
932
+ - **Prettier** for formatting
933
+ - Write **JSDoc comments** for public APIs
934
+ - Follow **conventional commits** for commit messages
935
+
936
+ ### Pull Request Process
937
+
938
+ 1. Fork the repository
939
+ 2. Create a feature branch: `git checkout -b feature/amazing-feature`
940
+ 3. Make your changes
941
+ 4. Add tests if applicable
942
+ 5. Run `pnpm build` and `pnpm test`
943
+ 6. Commit with conventional commit message: `feat: add amazing feature`
944
+ 7. Push to your fork: `git push origin feature/amazing-feature`
945
+ 8. Open a Pull Request
946
+
947
+ ### Areas for Contribution
948
+
949
+ - 🔌 **New Sources** — Add support for Smithery, OpenAPI Directory, RapidAPI
950
+ - 🤖 **AI Providers** — Add support for Gemini, Mistral, local models
951
+ - 📝 **Documentation** — Improve examples, add tutorials
952
+ - 🧪 **Testing** — Add unit tests, integration tests
953
+ - 🐛 **Bug Fixes** — Check the issues tab
954
+
955
+ ---
956
+
957
+ ## 🔗 Related Projects
958
+
959
+ | Project | Description |
960
+ |---------|-------------|
961
+ | [github-to-mcp](https://github.com/nirholas/github-to-mcp) | Convert GitHub repos to MCP servers |
962
+ | [plugin.delivery](https://plugin.delivery) | Plugin marketplace for SperaxOS |
963
+ | [SperaxOS](https://sperax.io) | AI-native operating system |
964
+ | [lyra-registry](https://github.com/nirholas/lyra-registry) | Curated registry of discovered plugins |
965
+ | [UCAI](https://github.com/nirholas/ucai) | Universal Context AI framework |
966
+ | [MCP SDK](https://github.com/modelcontextprotocol/sdk) | Official Model Context Protocol SDK |
967
+
968
+ ---
969
+
970
+ ## 📄 License
971
+
972
+ MIT License © 2024 [nirholas](https://github.com/nirholas)
973
+
974
+ ```
975
+ MIT License
976
+
977
+ Permission is hereby granted, free of charge, to any person obtaining a copy
978
+ of this software and associated documentation files (the "Software"), to deal
979
+ in the Software without restriction, including without limitation the rights
980
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
981
+ copies of the Software, and to permit persons to whom the Software is
982
+ furnished to do so, subject to the following conditions:
983
+
984
+ The above copyright notice and this permission notice shall be included in all
985
+ copies or substantial portions of the Software.
986
+
987
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
988
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
989
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
990
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
991
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
992
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
993
+ SOFTWARE.
994
+ ```
995
+
996
+ ---
997
+
998
+ ## 🙏 Credits
999
+
1000
+ - made by nich [Model Context Protocol](https://modelcontextprotocol.io) ecosystem
1001
+ - Powered by [OpenAI](https://openai.com) and [Anthropic](https://anthropic.com)
1002
+ - Inspired by the need to automate plugin discovery for SperaxOS
1003
+
1004
+ ---
1005
+
1006
+ <div align="center">
1007
+
1008
+ **[⬆ Back to Top](#-lyra-tool-discovery)**
1009
+
1010
+
1011
+ </div>
package/package.json ADDED
@@ -0,0 +1,120 @@
1
+ {
2
+ "name": "@nirholas/lyra-tool-discovery",
3
+ "version": "0.1.0",
4
+ "description": "AI-powered MCP tool discovery - find, analyze, and generate plugin configs for Model Context Protocol servers",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ },
14
+ "./cli": {
15
+ "import": "./dist/cli.js",
16
+ "types": "./dist/cli.d.ts"
17
+ }
18
+ },
19
+ "bin": {
20
+ "lyra-discover": "./dist/cli.js"
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "README.md",
25
+ "LICENSE",
26
+ "CHANGELOG.md"
27
+ ],
28
+ "scripts": {
29
+ "build": "tsup",
30
+ "dev": "tsx src/cli.ts",
31
+ "discover": "tsx src/cli.ts discover",
32
+ "discover:dry": "tsx src/cli.ts discover --dry-run",
33
+ "typecheck": "tsc --noEmit",
34
+ "test": "vitest run",
35
+ "test:watch": "vitest",
36
+ "test:coverage": "vitest run --coverage",
37
+ "prepublishOnly": "pnpm run build && pnpm run test",
38
+ "example:basic": "tsx examples/basic-discovery.ts",
39
+ "example:repo": "tsx examples/analyze-single-repo.ts",
40
+ "example:npm": "tsx examples/analyze-npm-package.ts",
41
+ "example:ai": "tsx examples/custom-ai-provider.ts",
42
+ "example:batch": "tsx examples/batch-processing.ts",
43
+ "example:filter": "tsx examples/filter-by-template.ts",
44
+ "example:json": "tsx examples/json-output.ts",
45
+ "example:dry": "tsx examples/dry-run-mode.ts",
46
+ "example:search": "tsx examples/custom-search-queries.ts",
47
+ "example:pipeline": "tsx examples/pipeline-integration.ts",
48
+ "example:errors": "tsx examples/11-error-handling.ts",
49
+ "example:action": "tsx examples/12-github-action-script.ts",
50
+ "dashboard": "pnpm --dir dashboard dev",
51
+ "dashboard:build": "pnpm --dir dashboard build",
52
+ "dashboard:start": "pnpm --dir dashboard start"
53
+ },
54
+ "keywords": [
55
+ "mcp",
56
+ "model-context-protocol",
57
+ "ai",
58
+ "tool-discovery",
59
+ "plugin",
60
+ "crypto",
61
+ "defi",
62
+ "blockchain",
63
+ "web3",
64
+ "ethereum",
65
+ "openai",
66
+ "anthropic",
67
+ "claude",
68
+ "gpt",
69
+ "speraxos",
70
+ "plugin-delivery"
71
+ ],
72
+ "author": {
73
+ "name": "nirholas",
74
+ "url": "https://github.com/nirholas"
75
+ },
76
+ "license": "MIT",
77
+ "repository": {
78
+ "type": "git",
79
+ "url": "git+https://github.com/nirholas/lyra-tool-discovery.git"
80
+ },
81
+ "bugs": {
82
+ "url": "https://github.com/nirholas/lyra-tool-discovery/issues"
83
+ },
84
+ "homepage": "https://github.com/nirholas/lyra-tool-discovery#readme",
85
+ "engines": {
86
+ "node": ">=18.0.0"
87
+ },
88
+ "publishConfig": {
89
+ "access": "public",
90
+ "registry": "https://registry.npmjs.org/"
91
+ },
92
+ "dependencies": {
93
+ "@anthropic-ai/sdk": "^0.52.0",
94
+ "commander": "^13.0.0",
95
+ "debug": "^4.3.4",
96
+ "openai": "^4.77.0",
97
+ "zod": "^3.22.4"
98
+ },
99
+ "devDependencies": {
100
+ "@types/debug": "^4.1.12",
101
+ "@types/node": "^22.10.5",
102
+ "@vitest/coverage-v8": "^2.1.8",
103
+ "tsup": "^8.3.5",
104
+ "tsx": "^4.19.2",
105
+ "typescript": "^5.7.3",
106
+ "vitest": "^2.1.8"
107
+ },
108
+ "peerDependencies": {
109
+ "@anthropic-ai/sdk": ">=0.50.0",
110
+ "openai": ">=4.0.0"
111
+ },
112
+ "peerDependenciesMeta": {
113
+ "@anthropic-ai/sdk": {
114
+ "optional": true
115
+ },
116
+ "openai": {
117
+ "optional": true
118
+ }
119
+ }
120
+ }