auxiliar-mcp 0.6.4 → 0.7.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/dist/server.js +11 -1
- package/dist/tools/list.d.ts +23 -0
- package/dist/tools/list.js +89 -0
- package/package.json +1 -1
package/dist/server.js
CHANGED
|
@@ -7,9 +7,10 @@ import { setupService } from "./tools/setup.js";
|
|
|
7
7
|
import { checkCompatibility } from "./tools/compatibility.js";
|
|
8
8
|
import { getPricing } from "./tools/pricing.js";
|
|
9
9
|
import { getRisks } from "./tools/risks.js";
|
|
10
|
+
import { listServices } from "./tools/list.js";
|
|
10
11
|
const server = new McpServer({
|
|
11
12
|
name: "auxiliar",
|
|
12
|
-
version: "0.
|
|
13
|
+
version: "0.7.0",
|
|
13
14
|
});
|
|
14
15
|
// Tool: recommend_service
|
|
15
16
|
server.tool("recommend_service", "Get a current, verified recommendation for a cloud service based on your constraints. Returns pricing, risks, provision commands, and alternatives. Data is Chrome-verified from actual service websites (not stale training data).", {
|
|
@@ -63,6 +64,15 @@ server.tool("setup_service", "Get step-by-step setup instructions for a service,
|
|
|
63
64
|
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
64
65
|
};
|
|
65
66
|
});
|
|
67
|
+
// Tool: list_services
|
|
68
|
+
server.tool("list_services", "List all available services and categories. Use without parameters to see all categories, or specify a category to see its services.", {
|
|
69
|
+
category: z.string().max(100).optional().describe("Category to list services for (e.g., 'database', 'auth', 'email'). Aliases like 'db', 'authentication', 'mail' also work. Omit to see all categories."),
|
|
70
|
+
}, async (params) => {
|
|
71
|
+
const result = await listServices(params);
|
|
72
|
+
return {
|
|
73
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
|
|
74
|
+
};
|
|
75
|
+
});
|
|
66
76
|
async function main() {
|
|
67
77
|
const transport = new StdioServerTransport();
|
|
68
78
|
await server.connect(transport);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
interface ListParams {
|
|
2
|
+
category?: string;
|
|
3
|
+
}
|
|
4
|
+
interface ServiceSummary {
|
|
5
|
+
slug: string;
|
|
6
|
+
name: string;
|
|
7
|
+
summary: string;
|
|
8
|
+
}
|
|
9
|
+
interface CategorySummary {
|
|
10
|
+
category: string;
|
|
11
|
+
service_count: number;
|
|
12
|
+
}
|
|
13
|
+
interface ListResult {
|
|
14
|
+
type: "categories" | "services";
|
|
15
|
+
categories?: CategorySummary[];
|
|
16
|
+
services?: ServiceSummary[];
|
|
17
|
+
total_categories?: number;
|
|
18
|
+
total_services?: number;
|
|
19
|
+
category?: string;
|
|
20
|
+
error?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function listServices(params: ListParams): Promise<ListResult>;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { recommendations } from "../data/recommendations.js";
|
|
2
|
+
import { pingApi } from "./analytics.js";
|
|
3
|
+
// Category aliasing — same map as recommend.ts so agents can use varied names
|
|
4
|
+
const categoryAliases = {
|
|
5
|
+
"llm-api": "llm",
|
|
6
|
+
"llm-apis": "llm",
|
|
7
|
+
"ai": "llm",
|
|
8
|
+
"file-storage": "storage",
|
|
9
|
+
"object-storage": "storage",
|
|
10
|
+
"blob-storage": "storage",
|
|
11
|
+
"cache-kv": "cache",
|
|
12
|
+
"redis": "cache",
|
|
13
|
+
"vector-db": "vector",
|
|
14
|
+
"vector-database": "vector",
|
|
15
|
+
"vectordb": "vector",
|
|
16
|
+
"embeddings": "vector",
|
|
17
|
+
"feature-flags": "feature-flags",
|
|
18
|
+
"feature-flag": "feature-flags",
|
|
19
|
+
"flags": "feature-flags",
|
|
20
|
+
"message-queue": "queues",
|
|
21
|
+
"message-queues": "queues",
|
|
22
|
+
"queue": "queues",
|
|
23
|
+
"job-queue": "queues",
|
|
24
|
+
"background-jobs": "queues",
|
|
25
|
+
"scheduling": "cron",
|
|
26
|
+
"scheduled-tasks": "cron",
|
|
27
|
+
"cronjob": "cron",
|
|
28
|
+
"hosting": "deploy",
|
|
29
|
+
"deployment": "deploy",
|
|
30
|
+
"platform": "deploy",
|
|
31
|
+
"db": "database",
|
|
32
|
+
"postgres": "database",
|
|
33
|
+
"mysql": "database",
|
|
34
|
+
"sqlite": "database",
|
|
35
|
+
"authentication": "auth",
|
|
36
|
+
"login": "auth",
|
|
37
|
+
"mail": "email",
|
|
38
|
+
"transactional-email": "email",
|
|
39
|
+
"billing": "payments",
|
|
40
|
+
"subscriptions": "payments",
|
|
41
|
+
"error-tracking": "monitoring",
|
|
42
|
+
"observability": "monitoring",
|
|
43
|
+
"apm": "monitoring",
|
|
44
|
+
"logging": "monitoring",
|
|
45
|
+
"text-search": "search",
|
|
46
|
+
"full-text-search": "search",
|
|
47
|
+
"headless-cms": "cms",
|
|
48
|
+
"content-management": "cms",
|
|
49
|
+
"text-messaging": "sms",
|
|
50
|
+
"text-messages": "sms",
|
|
51
|
+
};
|
|
52
|
+
export async function listServices(params) {
|
|
53
|
+
// Ping API for analytics (non-blocking, silent fail)
|
|
54
|
+
pingApi("list", { category: params.category }).catch(() => { });
|
|
55
|
+
if (params.category) {
|
|
56
|
+
const resolved = categoryAliases[params.category.toLowerCase()] || params.category.toLowerCase();
|
|
57
|
+
const cat = recommendations[resolved];
|
|
58
|
+
if (!cat) {
|
|
59
|
+
const available = Object.keys(recommendations).join(", ");
|
|
60
|
+
return {
|
|
61
|
+
type: "services",
|
|
62
|
+
error: `No category found: ${params.category}. Available categories: ${available}`,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
const services = cat.services.map((svc) => ({
|
|
66
|
+
slug: svc.slug,
|
|
67
|
+
name: svc.name,
|
|
68
|
+
summary: svc.choose_if,
|
|
69
|
+
}));
|
|
70
|
+
return {
|
|
71
|
+
type: "services",
|
|
72
|
+
category: resolved,
|
|
73
|
+
services,
|
|
74
|
+
total_services: services.length,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
// No category — return all categories with service counts
|
|
78
|
+
const categories = Object.entries(recommendations).map(([key, val]) => ({
|
|
79
|
+
category: key,
|
|
80
|
+
service_count: val.services.length,
|
|
81
|
+
}));
|
|
82
|
+
const totalServices = categories.reduce((sum, c) => sum + c.service_count, 0);
|
|
83
|
+
return {
|
|
84
|
+
type: "categories",
|
|
85
|
+
categories,
|
|
86
|
+
total_categories: categories.length,
|
|
87
|
+
total_services: totalServices,
|
|
88
|
+
};
|
|
89
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "auxiliar-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "MCP server that keeps your AI agent's infrastructure knowledge current. Chrome-verified pricing, risk flags, compatibility checks, and setup guides for 74 cloud services.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/server.js",
|