pub-mcp 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.
- package/.dockerignore +13 -0
- package/.editorconfig +14 -0
- package/.env.example +15 -0
- package/.eslintrc.cjs +21 -0
- package/.github/workflows/ci.yml +63 -0
- package/.prettierrc +7 -0
- package/CHANGELOG.md +84 -0
- package/CODE_OF_CONDUCT.md +34 -0
- package/CONTRIBUTING.md +55 -0
- package/Dockerfile +13 -0
- package/LICENSE +21 -0
- package/README.md +287 -0
- package/dist/cache/cache.d.ts +27 -0
- package/dist/cache/cache.d.ts.map +1 -0
- package/dist/cache/cache.js +94 -0
- package/dist/cache/cache.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +286 -0
- package/dist/cli.js.map +1 -0
- package/dist/clients/githubClient.d.ts +33 -0
- package/dist/clients/githubClient.d.ts.map +1 -0
- package/dist/clients/githubClient.js +126 -0
- package/dist/clients/githubClient.js.map +1 -0
- package/dist/clients/pubClient.d.ts +28 -0
- package/dist/clients/pubClient.d.ts.map +1 -0
- package/dist/clients/pubClient.js +223 -0
- package/dist/clients/pubClient.js.map +1 -0
- package/dist/server-http.d.ts +7 -0
- package/dist/server-http.d.ts.map +1 -0
- package/dist/server-http.js +139 -0
- package/dist/server-http.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +69 -0
- package/dist/server.js.map +1 -0
- package/dist/toolRegistry.d.ts +74 -0
- package/dist/toolRegistry.d.ts.map +1 -0
- package/dist/toolRegistry.js +80 -0
- package/dist/toolRegistry.js.map +1 -0
- package/dist/tools/index.d.ts +142 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +214 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types/index.d.ts +55 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/rateLimiter.d.ts +13 -0
- package/dist/utils/rateLimiter.d.ts.map +1 -0
- package/dist/utils/rateLimiter.js +42 -0
- package/dist/utils/rateLimiter.js.map +1 -0
- package/package.json +72 -0
- package/skills-lock.json +25 -0
- package/src/cache/cache.ts +124 -0
- package/src/cli.ts +350 -0
- package/src/clients/githubClient.ts +169 -0
- package/src/clients/pubClient.ts +312 -0
- package/src/tools/index.ts +266 -0
- package/src/types/index.ts +61 -0
- package/src/utils/rateLimiter.ts +56 -0
- package/tsconfig.json +24 -0
- package/vitest.config.ts +14 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { PubClient } from '../clients/pubClient.js';
|
|
3
|
+
import type { GitHubClient } from '../clients/githubClient.js';
|
|
4
|
+
export declare const searchPackagesSchema: z.ZodObject<{
|
|
5
|
+
query: z.ZodString;
|
|
6
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
7
|
+
}, "strip", z.ZodTypeAny, {
|
|
8
|
+
query: string;
|
|
9
|
+
limit: number;
|
|
10
|
+
}, {
|
|
11
|
+
query: string;
|
|
12
|
+
limit?: number | undefined;
|
|
13
|
+
}>;
|
|
14
|
+
export declare const getPackageInfoSchema: z.ZodObject<{
|
|
15
|
+
name: z.ZodString;
|
|
16
|
+
}, "strip", z.ZodTypeAny, {
|
|
17
|
+
name: string;
|
|
18
|
+
}, {
|
|
19
|
+
name: string;
|
|
20
|
+
}>;
|
|
21
|
+
export declare const getPackageVersionsSchema: z.ZodObject<{
|
|
22
|
+
name: z.ZodString;
|
|
23
|
+
}, "strip", z.ZodTypeAny, {
|
|
24
|
+
name: string;
|
|
25
|
+
}, {
|
|
26
|
+
name: string;
|
|
27
|
+
}>;
|
|
28
|
+
export declare const getReadmeSchema: z.ZodObject<{
|
|
29
|
+
name: z.ZodString;
|
|
30
|
+
version: z.ZodOptional<z.ZodString>;
|
|
31
|
+
format: z.ZodOptional<z.ZodDefault<z.ZodEnum<["markdown", "text", "html"]>>>;
|
|
32
|
+
}, "strip", z.ZodTypeAny, {
|
|
33
|
+
name: string;
|
|
34
|
+
version?: string | undefined;
|
|
35
|
+
format?: "markdown" | "text" | "html" | undefined;
|
|
36
|
+
}, {
|
|
37
|
+
name: string;
|
|
38
|
+
version?: string | undefined;
|
|
39
|
+
format?: "markdown" | "text" | "html" | undefined;
|
|
40
|
+
}>;
|
|
41
|
+
export declare const getDependenciesSchema: z.ZodObject<{
|
|
42
|
+
name: z.ZodString;
|
|
43
|
+
version: z.ZodOptional<z.ZodString>;
|
|
44
|
+
}, "strip", z.ZodTypeAny, {
|
|
45
|
+
name: string;
|
|
46
|
+
version?: string | undefined;
|
|
47
|
+
}, {
|
|
48
|
+
name: string;
|
|
49
|
+
version?: string | undefined;
|
|
50
|
+
}>;
|
|
51
|
+
export declare const getPackageScoreSchema: z.ZodObject<{
|
|
52
|
+
name: z.ZodString;
|
|
53
|
+
}, "strip", z.ZodTypeAny, {
|
|
54
|
+
name: string;
|
|
55
|
+
}, {
|
|
56
|
+
name: string;
|
|
57
|
+
}>;
|
|
58
|
+
export declare const getChangelogSchema: z.ZodObject<{
|
|
59
|
+
name: z.ZodString;
|
|
60
|
+
version: z.ZodOptional<z.ZodString>;
|
|
61
|
+
}, "strip", z.ZodTypeAny, {
|
|
62
|
+
name: string;
|
|
63
|
+
version?: string | undefined;
|
|
64
|
+
}, {
|
|
65
|
+
name: string;
|
|
66
|
+
version?: string | undefined;
|
|
67
|
+
}>;
|
|
68
|
+
export declare const getPackageMetricsSchema: z.ZodObject<{
|
|
69
|
+
name: z.ZodString;
|
|
70
|
+
}, "strip", z.ZodTypeAny, {
|
|
71
|
+
name: string;
|
|
72
|
+
}, {
|
|
73
|
+
name: string;
|
|
74
|
+
}>;
|
|
75
|
+
export type SearchPackagesInput = {
|
|
76
|
+
query: string;
|
|
77
|
+
limit?: number;
|
|
78
|
+
};
|
|
79
|
+
export type GetPackageInfoInput = {
|
|
80
|
+
name: string;
|
|
81
|
+
};
|
|
82
|
+
export type GetPackageVersionsInput = {
|
|
83
|
+
name: string;
|
|
84
|
+
};
|
|
85
|
+
export type GetReadmeInput = {
|
|
86
|
+
name: string;
|
|
87
|
+
version?: string;
|
|
88
|
+
format?: 'markdown' | 'text' | 'html';
|
|
89
|
+
};
|
|
90
|
+
export type GetDependenciesInput = {
|
|
91
|
+
name: string;
|
|
92
|
+
version?: string;
|
|
93
|
+
};
|
|
94
|
+
export type GetPackageScoreInput = {
|
|
95
|
+
name: string;
|
|
96
|
+
};
|
|
97
|
+
export type GetChangelogInput = {
|
|
98
|
+
name: string;
|
|
99
|
+
version?: string;
|
|
100
|
+
};
|
|
101
|
+
export type GetPackageMetricsInput = {
|
|
102
|
+
name: string;
|
|
103
|
+
};
|
|
104
|
+
export interface ToolDefinition {
|
|
105
|
+
name: string;
|
|
106
|
+
description: string;
|
|
107
|
+
inputSchema: {
|
|
108
|
+
type: 'object';
|
|
109
|
+
properties: Record<string, unknown>;
|
|
110
|
+
required?: string[];
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
export declare const tools: ToolDefinition[];
|
|
114
|
+
export declare function handleSearchPackages(client: PubClient, input: SearchPackagesInput): Promise<{
|
|
115
|
+
packages: {
|
|
116
|
+
name: string;
|
|
117
|
+
description: string;
|
|
118
|
+
latestVersion: string;
|
|
119
|
+
}[];
|
|
120
|
+
total: number;
|
|
121
|
+
}>;
|
|
122
|
+
export declare function handleGetPackageInfo(client: PubClient, input: GetPackageInfoInput): Promise<import("../types/index.js").PackageInfo>;
|
|
123
|
+
export declare function handleGetPackageVersions(client: PubClient, input: GetPackageVersionsInput): Promise<{
|
|
124
|
+
versions: import("../types/index.js").PackageVersion[];
|
|
125
|
+
}>;
|
|
126
|
+
export declare function handleGetReadme(client: PubClient, githubClient: GitHubClient, input: GetReadmeInput): Promise<{
|
|
127
|
+
readme: string;
|
|
128
|
+
source: string;
|
|
129
|
+
format: string;
|
|
130
|
+
}>;
|
|
131
|
+
export declare function handleGetDependencies(client: PubClient, input: GetDependenciesInput): Promise<{
|
|
132
|
+
dependencies: Record<string, string>;
|
|
133
|
+
}>;
|
|
134
|
+
export declare function handleGetPackageScore(client: PubClient, input: GetPackageScoreInput): Promise<import("../types/index.js").PackageScore>;
|
|
135
|
+
export declare function handleGetChangelog(client: PubClient, input: GetChangelogInput): Promise<import("../types/index.js").PackageChangelog>;
|
|
136
|
+
export declare function handleGetPackageMetrics(client: PubClient, input: GetPackageMetricsInput): Promise<{
|
|
137
|
+
info: import("../types/index.js").PackageInfo;
|
|
138
|
+
score: import("../types/index.js").PackageScore;
|
|
139
|
+
versionCount: number;
|
|
140
|
+
latestVersion: string;
|
|
141
|
+
}>;
|
|
142
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG/D,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;EAE/B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;EAEnC,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;EAI1B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;EAGhC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;EAEhC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;EAG7B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;EAElC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACpE,MAAM,MAAM,mBAAmB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AACnD,MAAM,MAAM,uBAAuB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AACvD,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;CACvC,CAAC;AACF,MAAM,MAAM,oBAAoB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACtE,MAAM,MAAM,oBAAoB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AACpD,MAAM,MAAM,iBAAiB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACnE,MAAM,MAAM,sBAAsB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,eAAO,MAAM,KAAK,EAAE,cAAc,EAkGjC,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB;;;;;;;GAUvF;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,mBAAmB,oDAGvF;AAED,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,uBAAuB;;GAG/F;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,cAAc;;;;GAoCtB;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,oBAAoB;;GAGzF;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,oBAAoB,qDAGzF;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,iBAAiB,yDAYnF;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,sBAAsB;;;;;GAa7F"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { parseGitHubUrl } from '../clients/githubClient.js';
|
|
3
|
+
export const searchPackagesSchema = z.object({
|
|
4
|
+
query: z.string().min(1),
|
|
5
|
+
limit: z.number().int().min(1).max(100).default(10),
|
|
6
|
+
});
|
|
7
|
+
export const getPackageInfoSchema = z.object({
|
|
8
|
+
name: z.string().min(1),
|
|
9
|
+
});
|
|
10
|
+
export const getPackageVersionsSchema = z.object({
|
|
11
|
+
name: z.string().min(1),
|
|
12
|
+
});
|
|
13
|
+
export const getReadmeSchema = z.object({
|
|
14
|
+
name: z.string().min(1),
|
|
15
|
+
version: z.string().optional(),
|
|
16
|
+
format: z.enum(['markdown', 'text', 'html']).default('markdown').optional(),
|
|
17
|
+
});
|
|
18
|
+
export const getDependenciesSchema = z.object({
|
|
19
|
+
name: z.string().min(1),
|
|
20
|
+
version: z.string().optional(),
|
|
21
|
+
});
|
|
22
|
+
export const getPackageScoreSchema = z.object({
|
|
23
|
+
name: z.string().min(1),
|
|
24
|
+
});
|
|
25
|
+
export const getChangelogSchema = z.object({
|
|
26
|
+
name: z.string().min(1),
|
|
27
|
+
version: z.string().optional(),
|
|
28
|
+
});
|
|
29
|
+
export const getPackageMetricsSchema = z.object({
|
|
30
|
+
name: z.string().min(1),
|
|
31
|
+
});
|
|
32
|
+
export const tools = [
|
|
33
|
+
{
|
|
34
|
+
name: 'search_packages',
|
|
35
|
+
description: 'Search for packages on pub.dev by query',
|
|
36
|
+
inputSchema: {
|
|
37
|
+
type: 'object',
|
|
38
|
+
properties: {
|
|
39
|
+
query: { type: 'string', description: 'Search query string' },
|
|
40
|
+
limit: { type: 'number', description: 'Maximum number of results (default 10)' },
|
|
41
|
+
},
|
|
42
|
+
required: ['query'],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'get_package_info',
|
|
47
|
+
description: 'Get detailed information about a specific package',
|
|
48
|
+
inputSchema: {
|
|
49
|
+
type: 'object',
|
|
50
|
+
properties: {
|
|
51
|
+
name: { type: 'string', description: 'Package name' },
|
|
52
|
+
},
|
|
53
|
+
required: ['name'],
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'get_package_versions',
|
|
58
|
+
description: 'Get all available versions of a package',
|
|
59
|
+
inputSchema: {
|
|
60
|
+
type: 'object',
|
|
61
|
+
properties: {
|
|
62
|
+
name: { type: 'string', description: 'Package name' },
|
|
63
|
+
},
|
|
64
|
+
required: ['name'],
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: 'get_readme',
|
|
69
|
+
description: 'Get the README content of a package',
|
|
70
|
+
inputSchema: {
|
|
71
|
+
type: 'object',
|
|
72
|
+
properties: {
|
|
73
|
+
name: { type: 'string', description: 'Package name' },
|
|
74
|
+
version: { type: 'string', description: 'Specific version (optional, defaults to latest)' },
|
|
75
|
+
format: {
|
|
76
|
+
type: 'string',
|
|
77
|
+
description: 'Output format: markdown, text, or html (default: markdown)',
|
|
78
|
+
enum: ['markdown', 'text', 'html'],
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
required: ['name'],
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
name: 'get_dependencies',
|
|
86
|
+
description: 'Get the dependencies of a package',
|
|
87
|
+
inputSchema: {
|
|
88
|
+
type: 'object',
|
|
89
|
+
properties: {
|
|
90
|
+
name: { type: 'string', description: 'Package name' },
|
|
91
|
+
version: { type: 'string', description: 'Specific version (optional, defaults to latest)' },
|
|
92
|
+
},
|
|
93
|
+
required: ['name'],
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'get_package_score',
|
|
98
|
+
description: 'Get package score and metrics (pana points, likes, downloads, tags)',
|
|
99
|
+
inputSchema: {
|
|
100
|
+
type: 'object',
|
|
101
|
+
properties: {
|
|
102
|
+
name: { type: 'string', description: 'Package name' },
|
|
103
|
+
},
|
|
104
|
+
required: ['name'],
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'get_changelog',
|
|
109
|
+
description: 'Get the changelog of a specific package version',
|
|
110
|
+
inputSchema: {
|
|
111
|
+
type: 'object',
|
|
112
|
+
properties: {
|
|
113
|
+
name: { type: 'string', description: 'Package name' },
|
|
114
|
+
version: { type: 'string', description: 'Specific version (optional, defaults to latest)' },
|
|
115
|
+
},
|
|
116
|
+
required: ['name'],
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: 'get_package_metrics',
|
|
121
|
+
description: 'Get comprehensive metrics for a package (info + score + versions)',
|
|
122
|
+
inputSchema: {
|
|
123
|
+
type: 'object',
|
|
124
|
+
properties: {
|
|
125
|
+
name: { type: 'string', description: 'Package name' },
|
|
126
|
+
},
|
|
127
|
+
required: ['name'],
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
];
|
|
131
|
+
export async function handleSearchPackages(client, input) {
|
|
132
|
+
const result = await client.searchPackages(input.query, input.limit);
|
|
133
|
+
return {
|
|
134
|
+
packages: result.packages.map((p) => ({
|
|
135
|
+
name: p.name,
|
|
136
|
+
description: p.description,
|
|
137
|
+
latestVersion: p.latestVersion,
|
|
138
|
+
})),
|
|
139
|
+
total: result.total,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
export async function handleGetPackageInfo(client, input) {
|
|
143
|
+
const pkg = await client.getPackage(input.name);
|
|
144
|
+
return pkg;
|
|
145
|
+
}
|
|
146
|
+
export async function handleGetPackageVersions(client, input) {
|
|
147
|
+
const versions = await client.getPackageVersions(input.name);
|
|
148
|
+
return { versions };
|
|
149
|
+
}
|
|
150
|
+
export async function handleGetReadme(client, githubClient, input) {
|
|
151
|
+
const readme = await client.getReadme(input.name, input.version);
|
|
152
|
+
let finalReadme = readme;
|
|
153
|
+
let source = 'pub.dev';
|
|
154
|
+
if (!readme && input.name) {
|
|
155
|
+
try {
|
|
156
|
+
const pkg = await client.getPackage(input.name);
|
|
157
|
+
if (pkg.repository) {
|
|
158
|
+
const parsed = parseGitHubUrl(pkg.repository);
|
|
159
|
+
if (parsed) {
|
|
160
|
+
const githubReadme = await githubClient.getRepositoryReadme(parsed.owner, parsed.repo);
|
|
161
|
+
if (githubReadme) {
|
|
162
|
+
finalReadme = githubReadme;
|
|
163
|
+
source = 'github';
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// ignore errors and return no readme
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
const content = finalReadme || 'No README available';
|
|
173
|
+
if (input.format === 'text') {
|
|
174
|
+
return {
|
|
175
|
+
readme: content.replace(/[#*`_~\[\]]/g, '').trim(),
|
|
176
|
+
source,
|
|
177
|
+
format: 'text',
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
return { readme: content, source, format: input.format || 'markdown' };
|
|
181
|
+
}
|
|
182
|
+
export async function handleGetDependencies(client, input) {
|
|
183
|
+
const dependencies = await client.getDependencies(input.name, input.version);
|
|
184
|
+
return { dependencies };
|
|
185
|
+
}
|
|
186
|
+
export async function handleGetPackageScore(client, input) {
|
|
187
|
+
const score = await client.getPackageScore(input.name);
|
|
188
|
+
return score;
|
|
189
|
+
}
|
|
190
|
+
export async function handleGetChangelog(client, input) {
|
|
191
|
+
const changelog = await client.getChangelog(input.name, input.version);
|
|
192
|
+
if (!changelog) {
|
|
193
|
+
return {
|
|
194
|
+
version: input.version || 'latest',
|
|
195
|
+
content: 'No changelog available',
|
|
196
|
+
published: '',
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
return changelog;
|
|
200
|
+
}
|
|
201
|
+
export async function handleGetPackageMetrics(client, input) {
|
|
202
|
+
const [info, score, versions] = await Promise.all([
|
|
203
|
+
client.getPackage(input.name),
|
|
204
|
+
client.getPackageScore(input.name),
|
|
205
|
+
client.getPackageVersions(input.name),
|
|
206
|
+
]);
|
|
207
|
+
return {
|
|
208
|
+
info,
|
|
209
|
+
score,
|
|
210
|
+
versionCount: versions.length,
|
|
211
|
+
latestVersion: versions[0]?.version,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export interface PackageInfo {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
latestVersion: string;
|
|
5
|
+
published: string;
|
|
6
|
+
updated: string;
|
|
7
|
+
publisher?: string;
|
|
8
|
+
homepage?: string;
|
|
9
|
+
repository?: string;
|
|
10
|
+
issues?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface PackageVersion {
|
|
13
|
+
version: string;
|
|
14
|
+
published: string;
|
|
15
|
+
}
|
|
16
|
+
export interface PackageScore {
|
|
17
|
+
grantedPoints: number;
|
|
18
|
+
maxPoints: number;
|
|
19
|
+
likeCount: number;
|
|
20
|
+
downloadCount30Days: number;
|
|
21
|
+
tags: string[];
|
|
22
|
+
}
|
|
23
|
+
export interface PackageChangelog {
|
|
24
|
+
version: string;
|
|
25
|
+
published: string;
|
|
26
|
+
content: string;
|
|
27
|
+
}
|
|
28
|
+
export interface PackageDependencies {
|
|
29
|
+
direct: Record<string, string>;
|
|
30
|
+
dev: Record<string, string>;
|
|
31
|
+
transitive: Record<string, string>;
|
|
32
|
+
}
|
|
33
|
+
export interface SearchResult {
|
|
34
|
+
packages: {
|
|
35
|
+
name: string;
|
|
36
|
+
description: string;
|
|
37
|
+
latestVersion: string;
|
|
38
|
+
}[];
|
|
39
|
+
total: number;
|
|
40
|
+
}
|
|
41
|
+
export interface ToolInput {
|
|
42
|
+
query?: string;
|
|
43
|
+
limit?: number;
|
|
44
|
+
name?: string;
|
|
45
|
+
version?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface ToolOutput {
|
|
48
|
+
packages?: PackageInfo[];
|
|
49
|
+
versions?: PackageVersion[];
|
|
50
|
+
readme?: string;
|
|
51
|
+
dependencies?: PackageDependencies;
|
|
52
|
+
searchResults?: SearchResult;
|
|
53
|
+
[key: string]: unknown;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;KACvB,EAAE,CAAC;IACJ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class RateLimiter {
|
|
2
|
+
private limit;
|
|
3
|
+
constructor(concurrency?: number);
|
|
4
|
+
run<T>(fn: () => Promise<T>): Promise<T>;
|
|
5
|
+
setConcurrency(concurrency: number): void;
|
|
6
|
+
}
|
|
7
|
+
export declare const rateLimiter: RateLimiter;
|
|
8
|
+
export declare function withRetry<T>(fn: () => Promise<T>, options?: {
|
|
9
|
+
attempts?: number;
|
|
10
|
+
backoff?: number;
|
|
11
|
+
}): Promise<T>;
|
|
12
|
+
export declare function withRateLimit<T>(fn: () => Promise<T>): Promise<T>;
|
|
13
|
+
//# sourceMappingURL=rateLimiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimiter.d.ts","sourceRoot":"","sources":["../../src/utils/rateLimiter.ts"],"names":[],"mappings":"AAKA,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAA4B;gBAE7B,WAAW,GAAE,MAAuB;IAI1C,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI9C,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;CAG1C;AAED,eAAO,MAAM,WAAW,aAAoB,CAAC;AAE7C,wBAAsB,SAAS,CAAC,CAAC,EAC/B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACpD,OAAO,CAAC,CAAC,CAAC,CAyBZ;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEvE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import pLimit from 'p-limit';
|
|
2
|
+
const MAX_CONCURRENT = parseInt(process.env.MAX_CONCURRENT_REQUESTS || '5', 10);
|
|
3
|
+
const RETRY_ATTEMPTS = parseInt(process.env.RETRY_ATTEMPTS || '3', 10);
|
|
4
|
+
export class RateLimiter {
|
|
5
|
+
limit;
|
|
6
|
+
constructor(concurrency = MAX_CONCURRENT) {
|
|
7
|
+
this.limit = pLimit(concurrency);
|
|
8
|
+
}
|
|
9
|
+
async run(fn) {
|
|
10
|
+
return this.limit(fn);
|
|
11
|
+
}
|
|
12
|
+
setConcurrency(concurrency) {
|
|
13
|
+
this.limit = pLimit(concurrency);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export const rateLimiter = new RateLimiter();
|
|
17
|
+
export async function withRetry(fn, options = {}) {
|
|
18
|
+
const attempts = options.attempts || RETRY_ATTEMPTS;
|
|
19
|
+
const backoff = options.backoff || 1000;
|
|
20
|
+
let lastError = null;
|
|
21
|
+
for (let i = 0; i < attempts; i++) {
|
|
22
|
+
try {
|
|
23
|
+
return await fn();
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
lastError = error;
|
|
27
|
+
const isRetryable = error instanceof Error &&
|
|
28
|
+
('statusCode' in error
|
|
29
|
+
? error.statusCode === 429
|
|
30
|
+
: error.message.includes('ECONNRESET') || error.message.includes('ETIMEDOUT'));
|
|
31
|
+
if (!isRetryable || i === attempts - 1) {
|
|
32
|
+
throw lastError;
|
|
33
|
+
}
|
|
34
|
+
await new Promise((resolve) => setTimeout(resolve, backoff * Math.pow(2, i)));
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
throw lastError;
|
|
38
|
+
}
|
|
39
|
+
export async function withRateLimit(fn) {
|
|
40
|
+
return rateLimiter.run(fn);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=rateLimiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../src/utils/rateLimiter.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAE7B,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;AAChF,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;AAEvE,MAAM,OAAO,WAAW;IACd,KAAK,CAA4B;IAEzC,YAAY,cAAsB,cAAc;QAC9C,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,EAAoB;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,cAAc,CAAC,WAAmB;QAChC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAoB,EACpB,UAAmD,EAAE;IAErD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,cAAc,CAAC;IACpD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC;IAExC,IAAI,SAAS,GAAiB,IAAI,CAAC;IAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,SAAS,GAAG,KAAc,CAAC;YAC3B,MAAM,WAAW,GAAG,KAAK,YAAY,KAAK;gBACxC,CAAC,YAAY,IAAI,KAAK;oBACpB,CAAC,CAAE,KAAiC,CAAC,UAAU,KAAK,GAAG;oBACvD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;YAEnF,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,QAAQ,GAAG,CAAC,EAAE,CAAC;gBACvC,MAAM,SAAS,CAAC;YAClB,CAAC;YAED,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAI,EAAoB;IACzD,OAAO,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "pub-mcp",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MCP server for pub.dev - Enables AI assistants to access Dart/Flutter package information",
|
|
5
|
+
"main": "dist/cli.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"pub-mcp": "./dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/yourusername/pub-mcp.git"
|
|
13
|
+
},
|
|
14
|
+
"homepage": "https://github.com/yourusername/pub-mcp#readme",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/yourusername/pub-mcp/issues"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsc",
|
|
20
|
+
"start": "node dist/cli.js",
|
|
21
|
+
"cli": "node dist/cli.js",
|
|
22
|
+
"dev": "tsx watch src/cli.ts",
|
|
23
|
+
"test": "vitest run",
|
|
24
|
+
"test:watch": "vitest",
|
|
25
|
+
"lint": "eslint src --ext .ts",
|
|
26
|
+
"lint:fix": "eslint src --ext .ts --fix",
|
|
27
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
28
|
+
"check": "npm run lint && npm run test && npm run build"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"mcp",
|
|
32
|
+
"model-context-protocol",
|
|
33
|
+
"pub.dev",
|
|
34
|
+
"dart",
|
|
35
|
+
"flutter",
|
|
36
|
+
"package-manager",
|
|
37
|
+
"ai",
|
|
38
|
+
"claude",
|
|
39
|
+
"openai"
|
|
40
|
+
],
|
|
41
|
+
"author": "Your Name <your@email.com>",
|
|
42
|
+
"funding": {
|
|
43
|
+
"type": "github",
|
|
44
|
+
"url": "https://github.com/yourusername/pub-mcp"
|
|
45
|
+
},
|
|
46
|
+
"license": "MIT",
|
|
47
|
+
"dependencies": {
|
|
48
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
49
|
+
"cors": "^2.8.5",
|
|
50
|
+
"dotenv": "^16.4.0",
|
|
51
|
+
"express": "^4.18.0",
|
|
52
|
+
"p-limit": "^3.1.0",
|
|
53
|
+
"pino": "^10.3.1",
|
|
54
|
+
"zod": "^3.23.0"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@types/cors": "^2.8.19",
|
|
58
|
+
"@types/express": "^5.0.6",
|
|
59
|
+
"@types/node": "^20.11.0",
|
|
60
|
+
"@typescript-eslint/eslint-plugin": "^6.21.0",
|
|
61
|
+
"@typescript-eslint/parser": "^6.21.0",
|
|
62
|
+
"@vitest/coverage-v8": "^1.6.1",
|
|
63
|
+
"eslint": "^8.56.0",
|
|
64
|
+
"prettier": "^3.2.0",
|
|
65
|
+
"tsx": "^4.7.0",
|
|
66
|
+
"typescript": "^5.3.0",
|
|
67
|
+
"vitest": "^1.2.0"
|
|
68
|
+
},
|
|
69
|
+
"engines": {
|
|
70
|
+
"node": ">=20.0.0"
|
|
71
|
+
}
|
|
72
|
+
}
|
package/skills-lock.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"skills": {
|
|
4
|
+
"nodejs-backend-patterns": {
|
|
5
|
+
"source": "wshobson/agents",
|
|
6
|
+
"sourceType": "github",
|
|
7
|
+
"computedHash": "3d6cbc12f720d8f02e1936c3e7fab78245eaa69500edbceea93d493d4ece6094"
|
|
8
|
+
},
|
|
9
|
+
"nodejs-best-practices": {
|
|
10
|
+
"source": "sickn33/antigravity-awesome-skills",
|
|
11
|
+
"sourceType": "github",
|
|
12
|
+
"computedHash": "9f8d3f268624c4757f4039617942d3e8ddcf420b9295cb943bea3bf9feb37e9d"
|
|
13
|
+
},
|
|
14
|
+
"typescript-advanced-types": {
|
|
15
|
+
"source": "wshobson/agents",
|
|
16
|
+
"sourceType": "github",
|
|
17
|
+
"computedHash": "ee8377c523a911be41c31037b477805773ca5ab5ade181e44ca7dd3cd8df6692"
|
|
18
|
+
},
|
|
19
|
+
"vitest": {
|
|
20
|
+
"source": "antfu/skills",
|
|
21
|
+
"sourceType": "github",
|
|
22
|
+
"computedHash": "0efd9cf8c56aada060d418d009cfe621a7915d0c73a958fe611985bc0c2fa4b8"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|