@paretools/dotnet 0.11.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 (58) hide show
  1. package/LICENSE +21 -0
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +11 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/lib/dotnet-runner.d.ts +4 -0
  7. package/dist/lib/dotnet-runner.d.ts.map +1 -0
  8. package/dist/lib/dotnet-runner.js +6 -0
  9. package/dist/lib/dotnet-runner.js.map +1 -0
  10. package/dist/lib/formatters.d.ts +100 -0
  11. package/dist/lib/formatters.d.ts.map +1 -0
  12. package/dist/lib/formatters.js +272 -0
  13. package/dist/lib/formatters.js.map +1 -0
  14. package/dist/lib/parsers.d.ts +18 -0
  15. package/dist/lib/parsers.d.ts.map +1 -0
  16. package/dist/lib/parsers.js +382 -0
  17. package/dist/lib/parsers.js.map +1 -0
  18. package/dist/schemas/index.d.ts +251 -0
  19. package/dist/schemas/index.d.ts.map +1 -0
  20. package/dist/schemas/index.js +118 -0
  21. package/dist/schemas/index.js.map +1 -0
  22. package/dist/tools/add-package.d.ts +4 -0
  23. package/dist/tools/add-package.d.ts.map +1 -0
  24. package/dist/tools/add-package.js +72 -0
  25. package/dist/tools/add-package.js.map +1 -0
  26. package/dist/tools/build.d.ts +4 -0
  27. package/dist/tools/build.d.ts.map +1 -0
  28. package/dist/tools/build.js +74 -0
  29. package/dist/tools/build.js.map +1 -0
  30. package/dist/tools/clean.d.ts +4 -0
  31. package/dist/tools/clean.d.ts.map +1 -0
  32. package/dist/tools/clean.js +58 -0
  33. package/dist/tools/clean.js.map +1 -0
  34. package/dist/tools/index.d.ts +4 -0
  35. package/dist/tools/index.d.ts.map +1 -0
  36. package/dist/tools/index.js +30 -0
  37. package/dist/tools/index.js.map +1 -0
  38. package/dist/tools/list-package.d.ts +4 -0
  39. package/dist/tools/list-package.d.ts.map +1 -0
  40. package/dist/tools/list-package.js +78 -0
  41. package/dist/tools/list-package.js.map +1 -0
  42. package/dist/tools/publish.d.ts +4 -0
  43. package/dist/tools/publish.d.ts.map +1 -0
  44. package/dist/tools/publish.js +92 -0
  45. package/dist/tools/publish.js.map +1 -0
  46. package/dist/tools/restore.d.ts +4 -0
  47. package/dist/tools/restore.d.ts.map +1 -0
  48. package/dist/tools/restore.js +58 -0
  49. package/dist/tools/restore.js.map +1 -0
  50. package/dist/tools/run.d.ts +4 -0
  51. package/dist/tools/run.d.ts.map +1 -0
  52. package/dist/tools/run.js +91 -0
  53. package/dist/tools/run.js.map +1 -0
  54. package/dist/tools/test.d.ts +4 -0
  55. package/dist/tools/test.d.ts.map +1 -0
  56. package/dist/tools/test.js +81 -0
  57. package/dist/tools/test.js.map +1 -0
  58. package/package.json +64 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.d.ts","sourceRoot":"","sources":["../../src/tools/restore.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,4DAA4D;AAC5D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QA2DpD"}
@@ -0,0 +1,58 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS, projectPathInput, compactInput, } from "@paretools/shared";
3
+ import { dotnet } from "../lib/dotnet-runner.js";
4
+ import { parseDotnetRestoreOutput } from "../lib/parsers.js";
5
+ import { formatDotnetRestore, compactRestoreMap, formatRestoreCompact } from "../lib/formatters.js";
6
+ import { DotnetRestoreResultSchema } from "../schemas/index.js";
7
+ /** Registers the `restore` tool on the given MCP server. */
8
+ export function registerRestoreTool(server) {
9
+ server.registerTool("restore", {
10
+ title: ".NET Restore",
11
+ description: "Runs dotnet restore to restore NuGet dependencies and returns structured results.",
12
+ inputSchema: {
13
+ path: projectPathInput,
14
+ project: z
15
+ .string()
16
+ .max(INPUT_LIMITS.PATH_MAX)
17
+ .optional()
18
+ .describe("Path to the project or solution file"),
19
+ source: z
20
+ .array(z.string().max(INPUT_LIMITS.STRING_MAX))
21
+ .max(INPUT_LIMITS.ARRAY_MAX)
22
+ .optional()
23
+ .describe("NuGet package source URIs to use (--source)"),
24
+ locked: z
25
+ .boolean()
26
+ .optional()
27
+ .default(false)
28
+ .describe("Require lock file is up to date (--locked-mode)"),
29
+ verbosity: z
30
+ .enum(["quiet", "minimal", "normal", "detailed", "diagnostic"])
31
+ .optional()
32
+ .describe("MSBuild verbosity level"),
33
+ compact: compactInput,
34
+ },
35
+ outputSchema: DotnetRestoreResultSchema,
36
+ }, async ({ path, project, source, locked, verbosity, compact }) => {
37
+ const cwd = path || process.cwd();
38
+ if (project)
39
+ assertNoFlagInjection(project, "project");
40
+ const args = ["restore"];
41
+ if (project)
42
+ args.push(project);
43
+ if (source) {
44
+ for (const s of source) {
45
+ assertNoFlagInjection(s, "source");
46
+ args.push("--source", s);
47
+ }
48
+ }
49
+ if (locked)
50
+ args.push("--locked-mode");
51
+ if (verbosity)
52
+ args.push("--verbosity", verbosity);
53
+ const result = await dotnet(args, cwd);
54
+ const data = parseDotnetRestoreOutput(result.stdout, result.stderr, result.exitCode);
55
+ return compactDualOutput(data, result.stdout + result.stderr, formatDotnetRestore, compactRestoreMap, formatRestoreCompact, compact === false);
56
+ });
57
+ }
58
+ //# sourceMappingURL=restore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.js","sourceRoot":"","sources":["../../src/tools/restore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /** Registers the `run` tool on the given MCP server. */
3
+ export declare function registerRunTool(server: McpServer): void;
4
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,wDAAwD;AACxD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,QA8GhD"}
@@ -0,0 +1,91 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS, projectPathInput, compactInput, } from "@paretools/shared";
3
+ import { dotnet } from "../lib/dotnet-runner.js";
4
+ import { parseDotnetRunOutput } from "../lib/parsers.js";
5
+ import { formatDotnetRun, compactRunMap, formatRunCompact } from "../lib/formatters.js";
6
+ import { DotnetRunResultSchema } from "../schemas/index.js";
7
+ /** Registers the `run` tool on the given MCP server. */
8
+ export function registerRunTool(server) {
9
+ server.registerTool("run", {
10
+ title: ".NET Run",
11
+ description: "Runs a .NET application and returns structured output (exit code, stdout, stderr).",
12
+ inputSchema: {
13
+ path: projectPathInput,
14
+ project: z
15
+ .string()
16
+ .max(INPUT_LIMITS.PATH_MAX)
17
+ .optional()
18
+ .describe("Path to the project file to run"),
19
+ configuration: z
20
+ .string()
21
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
22
+ .optional()
23
+ .describe("Build configuration (e.g. Debug, Release)"),
24
+ framework: z
25
+ .string()
26
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
27
+ .optional()
28
+ .describe("Target framework (e.g. net8.0)"),
29
+ noBuild: z
30
+ .boolean()
31
+ .optional()
32
+ .default(false)
33
+ .describe("Skip build before running (--no-build)"),
34
+ noRestore: z
35
+ .boolean()
36
+ .optional()
37
+ .default(false)
38
+ .describe("Skip automatic restore before running (--no-restore)"),
39
+ args: z
40
+ .array(z.string().max(INPUT_LIMITS.STRING_MAX))
41
+ .max(INPUT_LIMITS.ARRAY_MAX)
42
+ .optional()
43
+ .describe("Arguments to pass to the application (after --)"),
44
+ timeout: z
45
+ .number()
46
+ .int()
47
+ .min(1000)
48
+ .max(600000)
49
+ .optional()
50
+ .describe("Execution timeout in milliseconds. Overrides the default 300s. " +
51
+ "Min: 1000 (1s), Max: 600000 (10m)."),
52
+ maxOutputSize: z
53
+ .number()
54
+ .int()
55
+ .min(1024)
56
+ .max(10485760)
57
+ .optional()
58
+ .default(1048576)
59
+ .describe("Maximum size in bytes for stdout/stderr before truncation. Default: 1048576 (1MB)."),
60
+ compact: compactInput,
61
+ },
62
+ outputSchema: DotnetRunResultSchema,
63
+ }, async ({ path, project, configuration, framework, noBuild, noRestore, args, timeout, maxOutputSize, compact, }) => {
64
+ const cwd = path || process.cwd();
65
+ if (project)
66
+ assertNoFlagInjection(project, "project");
67
+ if (configuration)
68
+ assertNoFlagInjection(configuration, "configuration");
69
+ if (framework)
70
+ assertNoFlagInjection(framework, "framework");
71
+ const dotnetArgs = ["run"];
72
+ if (project)
73
+ dotnetArgs.push("--project", project);
74
+ if (configuration)
75
+ dotnetArgs.push("--configuration", configuration);
76
+ if (framework)
77
+ dotnetArgs.push("--framework", framework);
78
+ if (noBuild)
79
+ dotnetArgs.push("--no-build");
80
+ if (noRestore)
81
+ dotnetArgs.push("--no-restore");
82
+ if (args && args.length > 0) {
83
+ dotnetArgs.push("--", ...args);
84
+ }
85
+ const result = await dotnet(dotnetArgs, cwd, timeout);
86
+ const timedOut = result.exitCode !== 0 && result.stderr?.includes("timed out");
87
+ const data = parseDotnetRunOutput(result.stdout, result.stderr, result.exitCode, maxOutputSize, timedOut);
88
+ return compactDualOutput(data, result.stdout + result.stderr, formatDotnetRun, compactRunMap, formatRunCompact, compact === false);
89
+ });
90
+ }
91
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/tools/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ /** Registers the `test` tool on the given MCP server. */
3
+ export declare function registerTestTool(server: McpServer): void;
4
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/tools/test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAazE,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAqFjD"}
@@ -0,0 +1,81 @@
1
+ import { z } from "zod";
2
+ import { compactDualOutput, assertNoFlagInjection, INPUT_LIMITS, projectPathInput, compactInput, } from "@paretools/shared";
3
+ import { dotnet } from "../lib/dotnet-runner.js";
4
+ import { parseDotnetTestOutput } from "../lib/parsers.js";
5
+ import { formatDotnetTest, compactTestMap, formatTestCompact } from "../lib/formatters.js";
6
+ import { DotnetTestResultSchema } from "../schemas/index.js";
7
+ /** Registers the `test` tool on the given MCP server. */
8
+ export function registerTestTool(server) {
9
+ server.registerTool("test", {
10
+ title: ".NET Test",
11
+ description: "Runs dotnet test and returns structured test results (name, status, pass/fail counts).",
12
+ inputSchema: {
13
+ path: projectPathInput,
14
+ project: z
15
+ .string()
16
+ .max(INPUT_LIMITS.PATH_MAX)
17
+ .optional()
18
+ .describe("Path to the test project or solution file"),
19
+ filter: z
20
+ .string()
21
+ .max(INPUT_LIMITS.STRING_MAX)
22
+ .optional()
23
+ .describe("Filter expression to select tests (--filter)"),
24
+ configuration: z
25
+ .string()
26
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
27
+ .optional()
28
+ .describe("Build configuration (e.g. Debug, Release)"),
29
+ framework: z
30
+ .string()
31
+ .max(INPUT_LIMITS.SHORT_STRING_MAX)
32
+ .optional()
33
+ .describe("Target framework (e.g. net8.0)"),
34
+ noRestore: z
35
+ .boolean()
36
+ .optional()
37
+ .default(false)
38
+ .describe("Skip automatic restore before testing (--no-restore)"),
39
+ noBuild: z
40
+ .boolean()
41
+ .optional()
42
+ .default(false)
43
+ .describe("Skip build before testing (--no-build)"),
44
+ verbosity: z
45
+ .enum(["quiet", "minimal", "normal", "detailed", "diagnostic"])
46
+ .optional()
47
+ .describe("MSBuild verbosity level"),
48
+ compact: compactInput,
49
+ },
50
+ outputSchema: DotnetTestResultSchema,
51
+ }, async ({ path, project, filter, configuration, framework, noRestore, noBuild, verbosity, compact, }) => {
52
+ const cwd = path || process.cwd();
53
+ if (project)
54
+ assertNoFlagInjection(project, "project");
55
+ if (filter)
56
+ assertNoFlagInjection(filter, "filter");
57
+ if (configuration)
58
+ assertNoFlagInjection(configuration, "configuration");
59
+ if (framework)
60
+ assertNoFlagInjection(framework, "framework");
61
+ const args = ["test", "--logger", "console;verbosity=detailed"];
62
+ if (project)
63
+ args.push(project);
64
+ if (filter)
65
+ args.push("--filter", filter);
66
+ if (configuration)
67
+ args.push("--configuration", configuration);
68
+ if (framework)
69
+ args.push("--framework", framework);
70
+ if (noRestore)
71
+ args.push("--no-restore");
72
+ if (noBuild)
73
+ args.push("--no-build");
74
+ if (verbosity)
75
+ args.push("--verbosity", verbosity);
76
+ const result = await dotnet(args, cwd);
77
+ const data = parseDotnetTestOutput(result.stdout, result.stderr, result.exitCode);
78
+ return compactDualOutput(data, result.stdout + result.stderr, formatDotnetTest, compactTestMap, formatTestCompact, compact === false);
79
+ });
80
+ }
81
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/tools/test.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "@paretools/dotnet",
3
+ "version": "0.11.0",
4
+ "mcpName": "io.github.Dave-London/pare-dotnet",
5
+ "description": "MCP server for .NET CLI operations with structured, token-efficient output",
6
+ "license": "MIT",
7
+ "keywords": [
8
+ "mcp",
9
+ "mcp-server",
10
+ "model-context-protocol",
11
+ "structured-output",
12
+ "ai",
13
+ "dotnet",
14
+ "csharp",
15
+ "fsharp",
16
+ "nuget"
17
+ ],
18
+ "homepage": "https://github.com/Dave-London/Pare/tree/main/packages/server-dotnet",
19
+ "engines": {
20
+ "node": ">=20"
21
+ },
22
+ "type": "module",
23
+ "bin": {
24
+ "pare-dotnet": "./dist/index.js"
25
+ },
26
+ "exports": {
27
+ ".": {
28
+ "types": "./dist/index.d.ts",
29
+ "default": "./dist/index.js"
30
+ }
31
+ },
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/Dave-London/Pare.git",
38
+ "directory": "packages/server-dotnet"
39
+ },
40
+ "bugs": {
41
+ "url": "https://github.com/Dave-London/Pare/issues"
42
+ },
43
+ "files": [
44
+ "dist"
45
+ ],
46
+ "dependencies": {
47
+ "@modelcontextprotocol/sdk": "^1.26.0",
48
+ "zod": "^4.3.6",
49
+ "@paretools/shared": "0.11.0"
50
+ },
51
+ "devDependencies": {
52
+ "@types/node": "^25.2.3",
53
+ "typescript": "^5.7.0",
54
+ "vitest": "^4.0.18",
55
+ "@paretools/tsconfig": "0.0.0"
56
+ },
57
+ "scripts": {
58
+ "build": "tsc",
59
+ "test": "vitest run",
60
+ "test:watch": "vitest",
61
+ "coverage": "vitest run --coverage",
62
+ "lint": "eslint src/"
63
+ }
64
+ }