@e18e/mcp 0.0.4 → 0.0.6

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.
@@ -0,0 +1 @@
1
+ export declare function get_docs(): Promise<any>;
@@ -0,0 +1,2 @@
1
+ import type { Icons } from 'tmcp';
2
+ export declare const icons: Icons['icons'];
@@ -0,0 +1,3 @@
1
+ import { McpServer } from 'tmcp';
2
+ export declare const server: McpServer<import("valibot").GenericSchema, undefined>;
3
+ export type E18EMcpServer = typeof server;
package/dist/index.js CHANGED
@@ -1,7 +1,5 @@
1
- #!/usr/bin/env node
2
1
  import { McpServer } from 'tmcp';
3
2
  import { ValibotJsonSchemaAdapter } from '@tmcp/adapter-valibot';
4
- import { StdioTransport } from '@tmcp/transport-stdio';
5
3
  import { setup_tools, setup_prompts, setup_resources } from './setup.js';
6
4
  import { icons } from './icons/index.js';
7
5
  export const server = new McpServer({
@@ -21,6 +19,4 @@ export const server = new McpServer({
21
19
  setup_tools(server);
22
20
  setup_resources(server);
23
21
  setup_prompts(server);
24
- const stdio_transport = new StdioTransport(server);
25
- stdio_transport.listen();
26
22
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,SAAS,CAClC;IACC,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,OAAO;IAChB,KAAK;IACL,WAAW,EACV,2IAA2I;CAC5I,EACD;IACC,OAAO,EAAE,IAAI,wBAAwB,EAAE;IACvC,YAAY,EAAE;QACb,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;QAC5B,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;QAChC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;QAC9B,WAAW,EAAE,EAAE;KACf;CACD,CACD,CAAC;AAIF,WAAW,CAAC,MAAM,CAAC,CAAC;AACpB,eAAe,CAAC,MAAM,CAAC,CAAC;AACxB,aAAa,CAAC,MAAM,CAAC,CAAC;AAEtB,MAAM,eAAe,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACnD,eAAe,CAAC,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,SAAS,CAClC;IACC,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,OAAO;IAChB,KAAK;IACL,WAAW,EACV,2IAA2I;CAC5I,EACD;IACC,OAAO,EAAE,IAAI,wBAAwB,EAAE;IACvC,YAAY,EAAE;QACb,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;QAC5B,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;QAChC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;QAC9B,WAAW,EAAE,EAAE;KACf;CACD,CACD,CAAC;AAIF,WAAW,CAAC,MAAM,CAAC,CAAC;AACpB,eAAe,CAAC,MAAM,CAAC,CAAC;AACxB,aAAa,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export { task } from './task/index.js';
@@ -0,0 +1,2 @@
1
+ import type { E18EMcpServer } from '../../index.js';
2
+ export declare function task(server: E18EMcpServer): void;
@@ -0,0 +1 @@
1
+ export { replacement_docs } from './replacement-docs/index.js';
@@ -0,0 +1,2 @@
1
+ import type { E18EMcpServer } from '../../index.js';
2
+ export declare function replacement_docs(server: E18EMcpServer): void;
package/dist/run.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/run.js ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ import { StdioTransport } from '@tmcp/transport-stdio';
3
+ import { server } from './index.js';
4
+ const stdio_transport = new StdioTransport(server);
5
+ stdio_transport.listen();
6
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,MAAM,eAAe,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACnD,eAAe,CAAC,MAAM,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { E18EMcpServer } from './index.js';
2
+ export declare function setup_tools(server: E18EMcpServer): void;
3
+ export declare function setup_resources(server: E18EMcpServer): void;
4
+ export declare function setup_prompts(server: E18EMcpServer): void;
@@ -0,0 +1,2 @@
1
+ import type { E18EMcpServer } from '../../index.js';
2
+ export declare function code_checker(server: E18EMcpServer): void;
@@ -0,0 +1,2 @@
1
+ export { npm_i_checker } from './npm-i-checker/index.js';
2
+ export { code_checker } from './code-checker/index.js';
@@ -0,0 +1,2 @@
1
+ import type { E18EMcpServer } from '../../index.js';
2
+ export declare function npm_i_checker(server: E18EMcpServer): void;
@@ -0,0 +1 @@
1
+ export declare function get_suggestions_for_package(pkg: string): string | undefined;
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@e18e/mcp",
3
3
  "mcpName": "dev.e18e/e18e",
4
- "version": "0.0.4",
4
+ "version": "0.0.6",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
8
  "description": "The official e18e MCP server for advising agents on modern and performant best practices",
9
9
  "type": "module",
10
10
  "bin": {
11
- "e18e-mcp": "dist/index.js"
11
+ "e18e-mcp": "dist/run.js"
12
12
  },
13
13
  "homepage": "https://github.com/e18e/mcp#readme",
14
14
  "bugs": {
@@ -20,8 +20,15 @@
20
20
  "path": "packages/stdio"
21
21
  },
22
22
  "files": [
23
- "./dist"
23
+ "./dist",
24
+ "!./dist/*.test.{js,d.ts,js.map}"
24
25
  ],
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/index.d.ts",
29
+ "default": "./dist/index.js"
30
+ }
31
+ },
25
32
  "keywords": [
26
33
  "tmcp",
27
34
  "mcp",
@@ -29,26 +36,26 @@
29
36
  "e18e"
30
37
  ],
31
38
  "dependencies": {
32
- "@tmcp/adapter-valibot": "^0.1.5",
33
- "@tmcp/transport-stdio": "^0.4.1",
39
+ "@tmcp/adapter-valibot": "^0.1.6",
40
+ "@tmcp/transport-stdio": "^0.4.3",
34
41
  "es-module-lexer": "^1.7.0",
35
42
  "module-replacements": "^2.10.1",
36
- "tmcp": "^1.18.1",
37
- "valibot": "^1.2.0",
38
- "vitest": "^4.0.14"
43
+ "tmcp": "^1.19.4",
44
+ "valibot": "^1.4.2"
39
45
  },
40
46
  "devDependencies": {
41
- "@modelcontextprotocol/inspector": "^0.17.2",
42
- "@types/node": "^24.0.15",
43
- "@typescript/native-preview": "7.0.0-dev.20251125.1",
44
- "publint": "^0.3.15"
47
+ "@modelcontextprotocol/inspector": "^0.18.0",
48
+ "@types/node": "^26.1.1",
49
+ "@typescript/native-preview": "7.0.0-dev.20260109.1",
50
+ "publint": "^0.3.16",
51
+ "vitest": "^4.0.16"
45
52
  },
46
53
  "scripts": {
47
54
  "build": "tsgo && pnpm generate:docs && pnpm copy-assets && publint",
48
55
  "copy-assets": "node ./scripts/copy-assets.ts",
49
56
  "generate:docs:dev": "node ./scripts/fetch-docs.ts dev",
50
57
  "generate:docs": "node ./scripts/fetch-docs.ts",
51
- "inspect": "pnpm build && mcp-inspector --transport stdio node ./dist/index.js",
58
+ "inspect": "pnpm build && mcp-inspector --transport stdio node ./dist/run.js",
52
59
  "update:version": "node scripts/update-version.ts",
53
60
  "test": "vitest"
54
61
  }
@@ -1,164 +0,0 @@
1
- import { InMemoryTransport, Session } from '@tmcp/transport-in-memory';
2
- import { beforeEach, describe, expect, it } from 'vitest';
3
- import { server } from './index.js';
4
- let transport;
5
- let session;
6
- beforeEach(async () => {
7
- transport = new InMemoryTransport(server);
8
- session = transport.session();
9
- await session.initialize('2025-11-25', {}, {
10
- name: 'test-client',
11
- version: '1.0.0',
12
- });
13
- });
14
- describe('npm-i-checker', () => {
15
- it('is an available tool', async () => {
16
- const tools = await session.listTools();
17
- expect(tools.tools).toContainEqual(expect.objectContaining({
18
- name: 'npm-i-checker',
19
- }));
20
- });
21
- describe.each(['npm', 'pnpm', 'yarn', 'bun'])('using "%s" package manager', (package_manager) => {
22
- // these are all the alias of `npm i`...they technically don't work with other package managers but we literally don't even check this
23
- // the test is just here to make sure that we at least support all the common aliases of `install`
24
- describe.each([
25
- 'add',
26
- 'a',
27
- 'i',
28
- 'in',
29
- 'ins',
30
- 'inst',
31
- 'insta',
32
- 'instal',
33
- 'isnt',
34
- 'isnta',
35
- 'isntal',
36
- 'isntall',
37
- ])('using alias "%s"', (alias) => {
38
- it("doesn't suggest anything for packages that don't have replacements", async () => {
39
- const tool = await session.callTool('npm-i-checker', {
40
- command: `${package_manager} ${alias} svelte`,
41
- });
42
- expect(tool.structuredContent).toEqual({
43
- suggestions: [],
44
- });
45
- });
46
- it('provides documentations for packages that have package replacements', async () => {
47
- const tool = await session.callTool('npm-i-checker', {
48
- command: `${package_manager} ${alias} chalk`,
49
- });
50
- expect(tool.structuredContent).toEqual({
51
- suggestions: [
52
- expect.stringContaining("Don't use `chalk` instead read the following document:"),
53
- ],
54
- });
55
- });
56
- it("provides documentations for packages that have package replacements even if there's a flag after", async () => {
57
- const tool = await session.callTool('npm-i-checker', {
58
- command: `${package_manager} ${alias} chalk --save-dev`,
59
- });
60
- expect(tool.structuredContent).toEqual({
61
- suggestions: [
62
- expect.stringContaining("Don't use `chalk` instead read the following document:"),
63
- ],
64
- });
65
- });
66
- it("provides documentations for packages that have package replacements even if there's a flag before", async () => {
67
- const tool = await session.callTool('npm-i-checker', {
68
- command: `${package_manager} ${alias} -w chalk`,
69
- });
70
- expect(tool.structuredContent).toEqual({
71
- suggestions: [
72
- expect.stringContaining("Don't use `chalk` instead read the following document:"),
73
- ],
74
- });
75
- });
76
- it('provides documentations for packages that have micro utilities replacements', async () => {
77
- const tool = await session.callTool('npm-i-checker', {
78
- command: `${package_manager} ${alias} arr-diff`,
79
- });
80
- expect(tool.structuredContent).toEqual({
81
- suggestions: [
82
- "Don't use `arr-diff` instead Use a.filter((item) => !b.includes(item))",
83
- ],
84
- });
85
- });
86
- it('provides documentations for multiple packages skipping the non problematic one', async () => {
87
- const tool = await session.callTool('npm-i-checker', {
88
- command: `${package_manager} ${alias} arr-diff svelte chalk`,
89
- });
90
- expect(tool.structuredContent).toEqual({
91
- suggestions: [
92
- "Don't use `arr-diff` instead Use a.filter((item) => !b.includes(item))",
93
- expect.stringContaining("Don't use `chalk` instead read the following document:"),
94
- ],
95
- });
96
- });
97
- });
98
- });
99
- });
100
- describe('code-checker', () => {
101
- it('is an available tool', async () => {
102
- const tools = await session.listTools();
103
- expect(tools.tools).toContainEqual(expect.objectContaining({
104
- name: 'code-checker',
105
- }));
106
- });
107
- it("doesn't suggest anything for packages that don't have replacements", async () => {
108
- const tool = await session.callTool('code-checker', {
109
- code: `import { onMount } from 'svelte';`,
110
- });
111
- expect(tool.structuredContent).toEqual({
112
- suggestions: [],
113
- });
114
- });
115
- it('provides documentations for packages that have package replacements', async () => {
116
- const tool = await session.callTool('code-checker', {
117
- code: `import chalk from 'chalk';
118
-
119
- console.log(chalk.blue('Hello world!'));`,
120
- });
121
- expect(tool.structuredContent).toEqual({
122
- suggestions: [
123
- expect.stringContaining("Don't use `chalk` instead read the following document:"),
124
- ],
125
- });
126
- });
127
- it('provides documentations for packages that have micro utilities replacements', async () => {
128
- const tool = await session.callTool('code-checker', {
129
- code: `import diff from 'arr-diff';
130
-
131
- const a = ['a', 'b', 'c', 'd'];
132
- const b = ['b', 'c'];
133
-
134
- console.log(diff(a, b));`,
135
- });
136
- expect(tool.structuredContent).toEqual({
137
- suggestions: [
138
- "Don't use `arr-diff` instead Use a.filter((item) => !b.includes(item))",
139
- ],
140
- });
141
- });
142
- it('provides documentations for multiple packages skipping the non problematic one', async () => {
143
- const tool = await session.callTool('code-checker', {
144
- code: `import chalk from 'chalk';
145
- import { onMount } from 'svelte';
146
- import diff from 'arr-diff';
147
-
148
- onMount(()=>{
149
- const a = ['a', 'b', 'c', 'd'];
150
- const b = ['b', 'c'];
151
-
152
- console.log(diff(a, b));
153
- });
154
- `,
155
- });
156
- expect(tool.structuredContent).toEqual({
157
- suggestions: [
158
- expect.stringContaining("Don't use `chalk` instead read the following document:"),
159
- "Don't use `arr-diff` instead Use a.filter((item) => !b.includes(item))",
160
- ],
161
- });
162
- });
163
- });
164
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}