@ayga/mcp-client 2.1.0 → 3.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.
package/README.md CHANGED
@@ -1,189 +1,229 @@
1
- # Ayga MCP Client (Node.js)
2
-
3
- Modern, lightweight MCP client for Redis API with **40 AI parsers** across **9 categories**.
4
-
5
- ## 🚀 Quick Start
6
-
7
- ### Install via npx (recommended)
8
-
9
- ```bash
10
- npx @ayga/mcp-client
11
- ```
12
-
13
- ### VS Code Copilot Configuration
14
-
15
- Add to `%APPDATA%\Code\User\mcp.json`:
16
-
17
- ```json
18
- {
19
- "inputs": [
20
- {
21
- "id": "REDIS_API_KEY",
22
- "type": "promptString",
23
- "description": "ayga-mcp-client Redis API key",
24
- "password": true
25
- }
26
- ],
27
- "servers": {
28
- "ayga": {
29
- "type": "stdio",
30
- "command": "npx",
31
- "args": ["@ayga/mcp-client@latest"],
32
- "env": {
33
- "REDIS_API_KEY": "${input:REDIS_API_KEY}"
34
- }
35
- }
36
- }
37
- }
38
- ```
39
-
40
- ### Claude Desktop Configuration
41
-
42
- Add to `%APPDATA%\Claude\claude_desktop_config.json`:
43
-
44
- ```json
45
- {
46
- "mcpServers": {
47
- "ayga": {
48
- "command": "npx",
49
- "args": ["@ayga/mcp-client@latest"],
50
- "env": {
51
- "REDIS_API_KEY": "your-api-key-here"
52
- }
53
- }
54
- }
55
- }
56
- ```
57
-
58
- ## 📦 Available Parsers (40 total)
59
-
60
- ### AI Chat (8)
61
- - `search_perplexity` - Perplexity AI with sources
62
- - `search_chatgpt` - ChatGPT with web search
63
- - `search_claude` - Anthropic Claude
64
- - `search_gemini` - Google Gemini
65
- - `search_copilot` - Microsoft Copilot
66
- - `search_grok` - xAI Grok
67
- - `search_deepseek` - DeepSeek AI
68
- - `search_deepai` - DeepAI
69
-
70
- ### Search Engines (8)
71
- - `search_google_search` - Google Search
72
- - `search_bing_search` - Bing Search
73
- - `search_duckduckgo` - DuckDuckGo
74
- - `search_yahoo_search` - Yahoo Search
75
- - `search_yandex_search` - Yandex Search
76
- - `search_baidu_search` - Baidu Search
77
- - `search_rambler_search` - Rambler Search
78
- - `search_you_search` - You.com
79
-
80
- ### Instagram (4)
81
- - `search_instagram_profile` - User profiles
82
- - `search_instagram_post` - Individual posts
83
- - `search_instagram_tag` - Hashtag pages
84
- - `search_instagram_geo` - Location pages
85
-
86
- ### TikTok (1)
87
- - `search_tiktok_profile` - User profiles and videos
88
-
89
- ### YouTube (5)
90
- - `search_youtube_search` - Search videos
91
- - `search_youtube_video` - Video details
92
- - `search_youtube_comments` - Video comments
93
- - `search_youtube_channel_videos` - Channel videos
94
- - `search_youtube_channel_about` - Channel info
95
-
96
- ### Google Trends (1)
97
- - `search_google_trends` - Trends data
98
-
99
- ### Pinterest (1)
100
- - `search_pinterest_search` - Search pins
101
-
102
- ### Reddit (2)
103
- - `search_reddit_posts` - Search posts
104
- - `search_reddit_comments` - Post comments
105
-
106
- ### Translation (3)
107
- - `search_google_translate` - Google Translate
108
- - `search_bing_translate` - Bing Translator
109
- - `search_yandex_translate` - Yandex Translator
110
-
111
- ### HTML Content (3)
112
- - `search_link_extractor` - Extract links
113
- - `search_article_extractor` - Extract articles (Mozilla Readability)
114
- - `search_text_extractor` - Extract text content
115
-
116
- ## 💡 Usage Examples
117
-
118
- ### In Claude Desktop/VS Code
119
-
120
- ```
121
- @ayga list_parsers
122
- @ayga search_perplexity query="What is MCP protocol?"
123
- @ayga search_google_trends query="AI trends 2026"
124
- @ayga search_youtube_search query="Python tutorials" timeout=90
125
- @ayga search_google_translate query="Hello world"
126
- ```
127
-
128
- ### Command Line
129
-
130
- ```bash
131
- # Set API key
132
- export REDIS_API_KEY="your-api-key"
133
-
134
- # Run server
135
- npx @ayga/mcp-client
136
- ```
137
-
138
- ## 🏗️ Architecture
139
-
140
- ```
141
- ┌─────────────────────────────────────┐
142
- │ VS Code / Claude Desktop │
143
- └─────────────┬───────────────────────┘
144
- │ MCP stdio
145
- ┌─────────────▼───────────────────────┐
146
- │ @ayga/mcp-client (Node.js) │
147
- │ - 40 parsers │
148
- │ - MCP protocol │
149
- │ - JWT authentication │
150
- └─────────────┬───────────────────────┘
151
- │ HTTPS REST API
152
- ┌─────────────▼───────────────────────┐
153
- │ redis_wrapper (Python/FastAPI) │
154
- │ https://redis.ayga.tech │
155
- └─────────────┬───────────────────────┘
156
- Redis Queue
157
- ┌─────────────▼───────────────────────┐
158
- │ A-Parser (Windows) │
159
- └─────────────────────────────────────┘
160
- ```
161
-
162
- ## 🔑 Getting API Key
163
-
164
- 1. Visit https://redis.ayga.tech
165
- 2. Sign up or log in
166
- 3. Generate API key
167
- 4. Use in configuration
168
-
169
- ## 🆚 vs Python Version
170
-
171
- | Feature | Node.js (2.0.0) | Python (1.4.1) |
172
- | ---------------- | ---------------------- | ---------------------------- |
173
- | **Installation** | `npx @ayga/mcp-client` | `uvx ayga-mcp-client==1.4.1` |
174
- | **Startup** | ~50-100ms | ~716ms |
175
- | **Dependencies** | MCP SDK only | mcp, httpx, pydantic |
176
- | **Size** | ~500 lines | ~1200 lines |
177
- | **Runtime** | Node.js 18+ | Python 3.11+ |
178
- | **Parsers** | ✅ All 40 | ✅ All 40 |
179
-
180
- ## 📄 License
181
-
182
- MIT
183
-
184
- ## 🔗 Links
185
-
186
- - **API Backend**: https://redis.ayga.tech
187
- - **Python Version**: https://pypi.org/project/ayga-mcp-client/
188
- - **GitHub**: https://github.com/ozand/ayga-mcp-nodejs
189
- - **Issues**: https://github.com/ozand/ayga-mcp-nodejs/issues
1
+ # Ayga MCP Client (Node.js) v3.0.0
2
+
3
+ Modern, lightweight MCP client with **6 consolidated AI tools** - optimized for LLM context windows.
4
+
5
+ ## What's New in v3.0.0
6
+
7
+ **Context-Optimized Architecture**: Reduced from 40+ individual tools to 6 consolidated tools, saving ~80% context tokens while maintaining full functionality.
8
+
9
+ | Tool | Engines | Default |
10
+ |------|---------|---------|
11
+ | `ask_ai` | perplexity, chatgpt, claude, gemini, copilot, grok, deepseek, deepai | perplexity |
12
+ | `search_web` | google_search, bing_search, duckduckgo, yandex_search, yahoo_search, baidu_search, google_trends, rambler_search, you_search | google_search |
13
+ | `get_social` | instagram_profile, instagram_post, instagram_tag, instagram_geo, tiktok_profile, pinterest_search, reddit_posts, reddit_comments | instagram_profile |
14
+ | `get_video` | youtube_search, youtube_video, youtube_comments, youtube_channel_videos, youtube_channel_about | youtube_search |
15
+ | `translate` | google_translate, bing_translate, yandex_translate | google_translate |
16
+ | `extract` | text_extractor, article_extractor, link_extractor | text_extractor |
17
+
18
+ ## Quick Start
19
+
20
+ ### Install via npx (recommended)
21
+
22
+ ```bash
23
+ npx @ayga/mcp-client
24
+ ```
25
+
26
+ ### VS Code Copilot Configuration
27
+
28
+ Add to `%APPDATA%\Code\User\mcp.json`:
29
+
30
+ ```json
31
+ {
32
+ "inputs": [
33
+ {
34
+ "id": "REDIS_API_KEY",
35
+ "type": "promptString",
36
+ "description": "ayga-mcp-client Redis API key",
37
+ "password": true
38
+ }
39
+ ],
40
+ "servers": {
41
+ "ayga": {
42
+ "type": "stdio",
43
+ "command": "npx",
44
+ "args": ["@ayga/mcp-client@latest"],
45
+ "env": {
46
+ "REDIS_API_KEY": "${input:REDIS_API_KEY}"
47
+ }
48
+ }
49
+ }
50
+ }
51
+ ```
52
+
53
+ ### Claude Desktop Configuration
54
+
55
+ Add to `%APPDATA%\Claude\claude_desktop_config.json`:
56
+
57
+ ```json
58
+ {
59
+ "mcpServers": {
60
+ "ayga": {
61
+ "command": "npx",
62
+ "args": ["@ayga/mcp-client@latest"],
63
+ "env": {
64
+ "REDIS_API_KEY": "your-api-key-here"
65
+ }
66
+ }
67
+ }
68
+ }
69
+ ```
70
+
71
+ ## Usage Examples
72
+
73
+ ### Basic Usage (uses default engine)
74
+
75
+ ```
76
+ ask_ai query="What is quantum computing?"
77
+ search_web query="latest AI news"
78
+ get_video query="Python tutorials"
79
+ translate query="Hello world"
80
+ ```
81
+
82
+ ### With Specific Engine
83
+
84
+ ```
85
+ ask_ai query="Explain transformers" engine="claude"
86
+ search_web query="weather today" engine="duckduckgo"
87
+ get_social query="@openai" engine="instagram_profile"
88
+ get_video query="dQw4w9WgXcQ" engine="youtube_video"
89
+ ```
90
+
91
+ ### With Timeout
92
+
93
+ ```
94
+ ask_ai query="Complex analysis" engine="perplexity" timeout=120
95
+ ```
96
+
97
+ ## Environment Variables
98
+
99
+ | Variable | Description | Default |
100
+ |----------|-------------|---------|
101
+ | `REDIS_API_KEY` | API key for authentication | (required) |
102
+ | `API_URL` | Backend API URL | https://redis.ayga.tech |
103
+ | `DEFAULT_AI_ENGINE` | Default for ask_ai | perplexity |
104
+ | `DEFAULT_SEARCH_ENGINE` | Default for search_web | google_search |
105
+ | `DEFAULT_SOCIAL_ENGINE` | Default for get_social | instagram_profile |
106
+ | `DEFAULT_VIDEO_ENGINE` | Default for get_video | youtube_search |
107
+ | `DEFAULT_TRANSLATION_ENGINE` | Default for translate | google_translate |
108
+ | `DEFAULT_EXTRACTION_ENGINE` | Default for extract | text_extractor |
109
+ | `DYNAMIC_PARSERS` | Enable dynamic parser loading | true |
110
+
111
+ ## Architecture
112
+
113
+ ```
114
+ +-------------------------------------+
115
+ | VS Code / Claude Desktop |
116
+ +-----------------+-------------------+
117
+ | MCP stdio
118
+ +-----------------v-------------------+
119
+ | @ayga/mcp-client (Node.js) |
120
+ | - 6 consolidated tools |
121
+ | - 36 parser engines |
122
+ | - JWT authentication |
123
+ +-----------------+-------------------+
124
+ | HTTPS REST API
125
+ +-----------------v-------------------+
126
+ | redis_wrapper (Python/FastAPI) |
127
+ | https://redis.ayga.tech |
128
+ +-----------------+-------------------+
129
+ | Redis Queue
130
+ +-----------------v-------------------+
131
+ | A-Parser (Windows) |
132
+ +-------------------------------------+
133
+ ```
134
+
135
+ ## Tool Reference
136
+
137
+ ### ask_ai
138
+ Query AI models for answers, analysis, and research.
139
+
140
+ **Engines**: perplexity, chatgpt, claude, gemini, copilot, grok, deepseek, deepai
141
+
142
+ ```
143
+ ask_ai query="What are the benefits of Rust?" engine="claude"
144
+ ```
145
+
146
+ ### search_web
147
+ Search the web or get trends data.
148
+
149
+ **Engines**: google_search, bing_search, duckduckgo, yandex_search, yahoo_search, baidu_search, google_trends, rambler_search, you_search
150
+
151
+ ```
152
+ search_web query="best programming languages 2026"
153
+ search_web query="AI" engine="google_trends"
154
+ ```
155
+
156
+ ### get_social
157
+ Get data from social media platforms.
158
+
159
+ **Engines**: instagram_profile, instagram_post, instagram_tag, instagram_geo, tiktok_profile, pinterest_search, reddit_posts, reddit_comments
160
+
161
+ ```
162
+ get_social query="@openai" engine="instagram_profile"
163
+ get_social query="machine learning" engine="reddit_posts"
164
+ ```
165
+
166
+ ### get_video
167
+ Search and get YouTube content.
168
+
169
+ **Engines**: youtube_search, youtube_video, youtube_comments, youtube_channel_videos, youtube_channel_about
170
+
171
+ ```
172
+ get_video query="Python crash course"
173
+ get_video query="https://youtube.com/watch?v=..." engine="youtube_comments"
174
+ ```
175
+
176
+ ### translate
177
+ Translate text between languages.
178
+
179
+ **Engines**: google_translate, bing_translate, yandex_translate
180
+
181
+ ```
182
+ translate query="Hello, how are you?"
183
+ translate query="Bonjour" engine="yandex_translate"
184
+ ```
185
+
186
+ ### extract
187
+ Extract content from web pages.
188
+
189
+ **Engines**: text_extractor, article_extractor, link_extractor
190
+
191
+ ```
192
+ extract query="https://example.com/article" engine="article_extractor"
193
+ extract query="https://example.com" engine="link_extractor"
194
+ ```
195
+
196
+ ## Migration from v2.x
197
+
198
+ **v2.x (40+ tools)**:
199
+ ```
200
+ search_perplexity query="What is MCP?"
201
+ search_google_search query="latest news"
202
+ search_youtube_video query="..."
203
+ ```
204
+
205
+ **v3.x (6 consolidated tools)**:
206
+ ```
207
+ ask_ai query="What is MCP?" # uses default: perplexity
208
+ ask_ai query="What is MCP?" engine="perplexity" # explicit
209
+ search_web query="latest news" # uses default: google_search
210
+ get_video query="..." engine="youtube_video"
211
+ ```
212
+
213
+ ## Getting API Key
214
+
215
+ 1. Visit https://redis.ayga.tech
216
+ 2. Sign up or log in
217
+ 3. Generate API key
218
+ 4. Use in configuration
219
+
220
+ ## License
221
+
222
+ MIT
223
+
224
+ ## Links
225
+
226
+ - **API Backend**: https://redis.ayga.tech
227
+ - **Python Version**: https://pypi.org/project/ayga-mcp-client/
228
+ - **GitHub**: https://github.com/ozand/ayga-mcp-nodejs
229
+ - **Issues**: https://github.com/ozand/ayga-mcp-nodejs/issues
package/dist/index.js CHANGED
@@ -3,6 +3,7 @@ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
3
3
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4
4
  import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
5
5
  import { getRegistry } from "./parser-registry.js";
6
+ import { TOOL_CATEGORIES, getParsersForTool, getDefaultEngine, buildToolSchema } from "./tool-definitions.js";
6
7
  // Configuration
7
8
  const API_URL = process.env.API_URL || "https://redis.ayga.tech";
8
9
  const API_KEY = process.env.REDIS_API_KEY;
@@ -10,13 +11,11 @@ const API_KEY = process.env.REDIS_API_KEY;
10
11
  const ENABLE_DYNAMIC = process.env.DYNAMIC_PARSERS !== "false";
11
12
  class AygaMCPServer {
12
13
  server;
13
- jwtToken;
14
- tokenExpiry;
15
14
  registry;
16
15
  constructor() {
17
16
  this.server = new Server({
18
17
  name: "ayga-mcp-client",
19
- version: "2.1.0",
18
+ version: "3.1.0",
20
19
  }, {
21
20
  capabilities: {
22
21
  tools: {},
@@ -34,46 +33,26 @@ class AygaMCPServer {
34
33
  const timestamp = new Date().toISOString();
35
34
  console.error(`[${timestamp}] [${level.toUpperCase()}] ${message}`);
36
35
  }
37
- async getJWT() {
38
- // Return cached token if still valid (with 5 min buffer)
39
- if (this.jwtToken && this.tokenExpiry && Date.now() < this.tokenExpiry - 300000) {
40
- return this.jwtToken;
41
- }
36
+ getAuthHeaders() {
37
+ /**
38
+ * Returns authentication headers for API requests.
39
+ * Uses X-API-Key directly - no JWT exchange needed.
40
+ */
42
41
  if (!API_KEY) {
43
42
  throw new Error("REDIS_API_KEY environment variable is required");
44
43
  }
45
- this.log("Exchanging API key for JWT token");
46
- try {
47
- const response = await fetch(`${API_URL}/auth/exchange`, {
48
- method: "POST",
49
- headers: {
50
- "X-API-Key": API_KEY,
51
- "Content-Type": "application/json",
52
- },
53
- });
54
- if (!response.ok) {
55
- const errorText = await response.text();
56
- throw new Error(`Auth failed (${response.status}): ${errorText}`);
57
- }
58
- const data = await response.json();
59
- this.jwtToken = data.access_token;
60
- // Set expiry (default 3600s, use 3000s to be safe)
61
- this.tokenExpiry = Date.now() + (data.expires_in || 3000) * 1000;
62
- this.log("JWT token obtained successfully");
63
- return this.jwtToken;
64
- }
65
- catch (error) {
66
- this.log(`Authentication error: ${error}`, "error");
67
- throw error;
68
- }
44
+ return {
45
+ "X-API-Key": API_KEY,
46
+ "Content-Type": "application/json",
47
+ };
69
48
  }
70
49
  async submitParserTask(parserId, query, timeout = 60) {
71
50
  const parser = await this.registry.getParserById(parserId);
72
51
  if (!parser) {
73
52
  throw new Error(`Unknown parser: ${parserId}`);
74
53
  }
75
- const token = await this.getJWT();
76
54
  const taskId = crypto.randomUUID();
55
+ const headers = this.getAuthHeaders();
77
56
  this.log(`Submitting task ${taskId} to parser ${parser.name}`);
78
57
  // Prepare task data for A-Parser
79
58
  const taskData = JSON.stringify([
@@ -88,10 +67,7 @@ class AygaMCPServer {
88
67
  // Submit task to Redis queue
89
68
  const submitResponse = await fetch(`${API_URL}/structures/list/aparser_redis_api/lpush`, {
90
69
  method: "POST",
91
- headers: {
92
- Authorization: `Bearer ${token}`,
93
- "Content-Type": "application/json",
94
- },
70
+ headers,
95
71
  body: JSON.stringify({ value: taskData }),
96
72
  });
97
73
  if (!submitResponse.ok) {
@@ -100,25 +76,21 @@ class AygaMCPServer {
100
76
  }
101
77
  this.log(`Task ${taskId} submitted, waiting for result (timeout: ${timeout}s)`);
102
78
  // Poll for result
103
- return await this.waitForResult(taskId, timeout, token);
79
+ return await this.waitForResult(taskId, timeout, headers);
104
80
  }
105
81
  catch (error) {
106
82
  this.log(`Task submission error: ${error}`, "error");
107
83
  throw error;
108
84
  }
109
85
  }
110
- async waitForResult(taskId, timeout, token) {
86
+ async waitForResult(taskId, timeout, headers) {
111
87
  const startTime = Date.now();
112
88
  const pollInterval = 2000; // 2 seconds
113
89
  let attempts = 0;
114
90
  while (Date.now() - startTime < timeout * 1000) {
115
91
  attempts++;
116
92
  try {
117
- const response = await fetch(`${API_URL}/kv/aparser_redis_api:${taskId}`, {
118
- headers: {
119
- Authorization: `Bearer ${token}`,
120
- },
121
- });
93
+ const response = await fetch(`${API_URL}/kv/aparser_redis_api:${taskId}`, { headers });
122
94
  if (response.ok) {
123
95
  const data = await response.json();
124
96
  const result = JSON.parse(data.value);
@@ -130,6 +102,13 @@ class AygaMCPServer {
130
102
  await new Promise((resolve) => setTimeout(resolve, pollInterval));
131
103
  continue;
132
104
  }
105
+ // Rate limit - wait and retry
106
+ if (response.status === 429) {
107
+ const retryAfter = parseInt(response.headers.get("Retry-After") || "5");
108
+ this.log(`Rate limited, waiting ${retryAfter}s...`, "debug");
109
+ await new Promise((resolve) => setTimeout(resolve, retryAfter * 1000));
110
+ continue;
111
+ }
133
112
  // Other errors
134
113
  const errorText = await response.text();
135
114
  throw new Error(`Failed to get result (${response.status}): ${errorText}`);
@@ -143,62 +122,59 @@ class AygaMCPServer {
143
122
  throw new Error(`Timeout waiting for result after ${timeout}s (${attempts} attempts)`);
144
123
  }
145
124
  setupHandlers() {
146
- // List available tools (dynamic)
125
+ // List available tools - 6 consolidated tools instead of 40+
147
126
  this.server.setRequestHandler(ListToolsRequestSchema, async () => {
148
127
  const parsers = await this.registry.getParsers();
149
- const tools = parsers.map((parser) => ({
150
- name: `search_${parser.id}`,
151
- description: `${parser.description} (Category: ${parser.category})`,
152
- inputSchema: {
153
- type: "object",
154
- properties: {
155
- query: {
156
- type: "string",
157
- description: parser.category === "Translation"
158
- ? "Text to translate"
159
- : "Search query or URL",
160
- },
161
- timeout: {
162
- type: "number",
163
- description: "Timeout in seconds (default: 60)",
164
- default: 60,
165
- },
166
- },
167
- required: ["query"],
168
- },
169
- }));
170
- // Add list_parsers tool
128
+ const tools = [];
129
+ // Build consolidated tools from categories
130
+ for (const toolCat of TOOL_CATEGORIES) {
131
+ const engines = getParsersForTool(toolCat.id, parsers).map(p => p.id);
132
+ if (engines.length > 0) {
133
+ tools.push(buildToolSchema(toolCat, engines));
134
+ }
135
+ }
136
+ // Add list_parsers utility tool
171
137
  tools.push({
172
138
  name: "list_parsers",
173
139
  description: "List all available parsers with their categories",
174
140
  inputSchema: {
175
141
  type: "object",
176
- properties: {},
142
+ properties: {
143
+ _placeholder: {
144
+ type: "boolean",
145
+ description: "Placeholder. Always pass true.",
146
+ },
147
+ },
148
+ required: ["_placeholder"],
177
149
  },
178
150
  });
151
+ this.log(`Registered ${tools.length} consolidated tools (${parsers.length} parsers available)`);
179
152
  return { tools };
180
153
  });
181
154
  // Call tool
182
155
  this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
183
156
  const { name, arguments: args } = request.params;
184
157
  try {
185
- // Handle list_parsers tool
158
+ // Handle list_parsers utility tool
186
159
  if (name === "list_parsers") {
187
- const category = args?.category;
188
- let parsers = await this.registry.getParsers();
189
- if (category) {
190
- parsers = parsers.filter((p) => p.category === category);
191
- }
160
+ const parsers = await this.registry.getParsers();
192
161
  const categories = await this.registry.getCategories();
162
+ // Group parsers by consolidated tool
163
+ const toolMapping = {};
164
+ for (const toolCat of TOOL_CATEGORIES) {
165
+ const engines = getParsersForTool(toolCat.id, parsers);
166
+ if (engines.length > 0) {
167
+ toolMapping[toolCat.id] = {
168
+ tool: toolCat.name,
169
+ parsers: engines.map(e => e.id),
170
+ };
171
+ }
172
+ }
193
173
  const result = {
194
174
  total: parsers.length,
175
+ consolidatedTools: TOOL_CATEGORIES.length,
195
176
  categories: categories,
196
- parsers: parsers.map((p) => ({
197
- id: p.id,
198
- name: p.name,
199
- category: p.category,
200
- description: p.description,
201
- })),
177
+ toolMapping: toolMapping,
202
178
  };
203
179
  return {
204
180
  content: [
@@ -209,16 +185,21 @@ class AygaMCPServer {
209
185
  ],
210
186
  };
211
187
  }
212
- // Handle parser tools
213
- if (name.startsWith("search_")) {
214
- const parserId = name.replace("search_", "");
188
+ // Handle consolidated tools (ask_ai, search_web, get_social, etc.)
189
+ const toolCat = TOOL_CATEGORIES.find(t => t.id === name);
190
+ if (toolCat) {
215
191
  const query = args?.query;
216
192
  const timeout = args?.timeout || 60;
193
+ // Get engine - use provided or default
194
+ let engine = args?.engine;
195
+ if (!engine) {
196
+ engine = getDefaultEngine(name);
197
+ }
217
198
  if (!query) {
218
199
  throw new Error("Query parameter is required");
219
200
  }
220
- this.log(`Executing ${name} with query: ${query.substring(0, 50)}...`);
221
- const result = await this.submitParserTask(parserId, query, timeout);
201
+ this.log(`Executing ${name} with engine=${engine}, query: ${query.substring(0, 50)}...`);
202
+ const result = await this.submitParserTask(engine, query, timeout);
222
203
  return {
223
204
  content: [
224
205
  {
@@ -228,7 +209,7 @@ class AygaMCPServer {
228
209
  ],
229
210
  };
230
211
  }
231
- throw new Error(`Unknown tool: ${name}`);
212
+ throw new Error(`Unknown tool: ${name}. Available: ${TOOL_CATEGORIES.map(t => t.id).join(", ")}, list_parsers`);
232
213
  }
233
214
  catch (error) {
234
215
  this.log(`Tool execution error: ${error}`, "error");
@@ -268,8 +249,9 @@ class AygaMCPServer {
268
249
  await this.server.connect(transport);
269
250
  // Pre-fetch parsers
270
251
  const parsers = await this.registry.getParsers();
271
- this.log("Ayga MCP Server v2.1.0 started");
252
+ this.log("Ayga MCP Server v3.1.0 started (stateless auth)");
272
253
  this.log(`API URL: ${API_URL}`);
254
+ this.log(`Auth: X-API-Key (direct, no JWT exchange)`);
273
255
  this.log(`Dynamic loading: ${ENABLE_DYNAMIC ? "enabled" : "disabled"}`);
274
256
  this.log(`Total parsers: ${parsers.length}`);
275
257
  this.log("Server ready on stdio transport");
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Consolidated Tool Definitions
3
+ *
4
+ * Instead of 40+ individual tools, we define 6 category-based tools
5
+ * with an optional 'engine' parameter for specific parser selection.
6
+ */
7
+ import type { ParserConfig } from "./parsers.js";
8
+ /**
9
+ * Tool category configuration
10
+ */
11
+ export interface ToolCategory {
12
+ id: string;
13
+ name: string;
14
+ description: string;
15
+ categories: string[];
16
+ defaultEngine: string;
17
+ defaultEnvVar: string;
18
+ queryDescription: string;
19
+ }
20
+ /**
21
+ * Consolidated tool definitions
22
+ */
23
+ export declare const TOOL_CATEGORIES: ToolCategory[];
24
+ /**
25
+ * Get parsers for a tool category
26
+ */
27
+ export declare function getParsersForTool(toolId: string, allParsers: ParserConfig[]): ParserConfig[];
28
+ /**
29
+ * Get default engine for a tool, checking ENV first
30
+ */
31
+ export declare function getDefaultEngine(toolId: string): string;
32
+ /**
33
+ * Find which tool a parser belongs to
34
+ */
35
+ export declare function findToolForParser(parserId: string, allParsers: ParserConfig[]): ToolCategory | undefined;
36
+ /**
37
+ * Build MCP tool schema for a consolidated tool
38
+ */
39
+ export declare function buildToolSchema(tool: ToolCategory, availableEngines: string[]): object;
40
+ //# sourceMappingURL=tool-definitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-definitions.d.ts","sourceRoot":"","sources":["../src/tool-definitions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,YAAY,EAuDzC,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,YAAY,EAAE,GAC3B,YAAY,EAAE,CAKhB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAWvD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,YAAY,EAAE,GAC3B,YAAY,GAAG,SAAS,CAK1B;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC3B,IAAI,EAAE,YAAY,EAClB,gBAAgB,EAAE,MAAM,EAAE,GAC3B,MAAM,CAwBR"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Consolidated Tool Definitions
3
+ *
4
+ * Instead of 40+ individual tools, we define 6 category-based tools
5
+ * with an optional 'engine' parameter for specific parser selection.
6
+ */
7
+ /**
8
+ * Consolidated tool definitions
9
+ */
10
+ export const TOOL_CATEGORIES = [
11
+ {
12
+ id: "ask_ai",
13
+ name: "Ask AI",
14
+ description: "Query AI models like Perplexity, ChatGPT, Claude, Gemini for answers and analysis",
15
+ categories: ["AI Chat"],
16
+ defaultEngine: "perplexity",
17
+ defaultEnvVar: "DEFAULT_AI_ENGINE",
18
+ queryDescription: "Question or prompt for the AI model",
19
+ },
20
+ {
21
+ id: "search_web",
22
+ name: "Web Search",
23
+ description: "Search the web using Google, Bing, DuckDuckGo, Yandex or get Google Trends data",
24
+ categories: ["Search Engines", "Google Trends"],
25
+ defaultEngine: "google_search",
26
+ defaultEnvVar: "DEFAULT_SEARCH_ENGINE",
27
+ queryDescription: "Search query",
28
+ },
29
+ {
30
+ id: "get_social",
31
+ name: "Social Media",
32
+ description: "Get data from social platforms: Instagram profiles/posts, TikTok, Reddit posts/comments, Pinterest",
33
+ categories: ["Instagram", "TikTok", "Reddit", "Pinterest"],
34
+ defaultEngine: "instagram_profile",
35
+ defaultEnvVar: "DEFAULT_SOCIAL_ENGINE",
36
+ queryDescription: "Username, URL, or search query",
37
+ },
38
+ {
39
+ id: "get_video",
40
+ name: "Video Data",
41
+ description: "Search YouTube videos, get video details, comments, or channel information",
42
+ categories: ["YouTube"],
43
+ defaultEngine: "youtube_search",
44
+ defaultEnvVar: "DEFAULT_VIDEO_ENGINE",
45
+ queryDescription: "Search query or video/channel URL",
46
+ },
47
+ {
48
+ id: "translate",
49
+ name: "Translate",
50
+ description: "Translate text using Google Translate, DeepL, Bing, or Yandex",
51
+ categories: ["Translation"],
52
+ defaultEngine: "google_translate",
53
+ defaultEnvVar: "DEFAULT_TRANSLATION_ENGINE",
54
+ queryDescription: "Text to translate",
55
+ },
56
+ {
57
+ id: "extract",
58
+ name: "Extract Content",
59
+ description: "Extract text, articles, or links from web pages",
60
+ categories: ["HTML Content"],
61
+ defaultEngine: "text_extractor",
62
+ defaultEnvVar: "DEFAULT_EXTRACTION_ENGINE",
63
+ queryDescription: "URL of the web page",
64
+ },
65
+ ];
66
+ /**
67
+ * Get parsers for a tool category
68
+ */
69
+ export function getParsersForTool(toolId, allParsers) {
70
+ const tool = TOOL_CATEGORIES.find(t => t.id === toolId);
71
+ if (!tool)
72
+ return [];
73
+ return allParsers.filter(p => tool.categories.includes(p.category));
74
+ }
75
+ /**
76
+ * Get default engine for a tool, checking ENV first
77
+ */
78
+ export function getDefaultEngine(toolId) {
79
+ const tool = TOOL_CATEGORIES.find(t => t.id === toolId);
80
+ if (!tool)
81
+ return "";
82
+ // Check environment variable first
83
+ const envValue = process.env[tool.defaultEnvVar];
84
+ if (envValue) {
85
+ return envValue;
86
+ }
87
+ return tool.defaultEngine;
88
+ }
89
+ /**
90
+ * Find which tool a parser belongs to
91
+ */
92
+ export function findToolForParser(parserId, allParsers) {
93
+ const parser = allParsers.find(p => p.id === parserId);
94
+ if (!parser)
95
+ return undefined;
96
+ return TOOL_CATEGORIES.find(t => t.categories.includes(parser.category));
97
+ }
98
+ /**
99
+ * Build MCP tool schema for a consolidated tool
100
+ */
101
+ export function buildToolSchema(tool, availableEngines) {
102
+ return {
103
+ name: tool.id,
104
+ description: tool.description,
105
+ inputSchema: {
106
+ type: "object",
107
+ properties: {
108
+ query: {
109
+ type: "string",
110
+ description: tool.queryDescription,
111
+ },
112
+ engine: {
113
+ type: "string",
114
+ description: `Specific engine to use. Available: ${availableEngines.join(", ")}. Default: ${getDefaultEngine(tool.id)}`,
115
+ enum: availableEngines,
116
+ },
117
+ timeout: {
118
+ type: "number",
119
+ description: "Timeout in seconds (default: 60)",
120
+ },
121
+ },
122
+ required: ["query"],
123
+ },
124
+ };
125
+ }
126
+ //# sourceMappingURL=tool-definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-definitions.js","sourceRoot":"","sources":["../src/tool-definitions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
- {
2
- "name": "@ayga/mcp-client",
3
- "version": "2.1.0",
4
- "description": "MCP client for Redis API with 40 AI parsers across 9 categories (Perplexity, ChatGPT, Instagram, TikTok, Google Trends, Pinterest, Link Extractor, YouTube, Translation, Search Engines)",
1
+ {
2
+ "name": "@ayga/mcp-client",
3
+ "version": "3.1.0",
4
+ "description": "MCP client with 6 consolidated AI tools - stateless X-API-Key auth, no JWT exchange needed",
5
5
  "keywords": [
6
6
  "mcp",
7
7
  "model-context-protocol",