driverge-mcp 0.0.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 (86) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +179 -0
  3. package/dist/codegen/esp32.d.ts +4 -0
  4. package/dist/codegen/esp32.js +78 -0
  5. package/dist/codegen/esp32.js.map +1 -0
  6. package/dist/codegen/ident.d.ts +10 -0
  7. package/dist/codegen/ident.js +31 -0
  8. package/dist/codegen/ident.js.map +1 -0
  9. package/dist/codegen/index.d.ts +15 -0
  10. package/dist/codegen/index.js +30 -0
  11. package/dist/codegen/index.js.map +1 -0
  12. package/dist/codegen/lint.d.ts +4 -0
  13. package/dist/codegen/lint.js +112 -0
  14. package/dist/codegen/lint.js.map +1 -0
  15. package/dist/codegen/portable.d.ts +4 -0
  16. package/dist/codegen/portable.js +258 -0
  17. package/dist/codegen/portable.js.map +1 -0
  18. package/dist/codegen/stm32.d.ts +4 -0
  19. package/dist/codegen/stm32.js +64 -0
  20. package/dist/codegen/stm32.js.map +1 -0
  21. package/dist/codegen/types.d.ts +20 -0
  22. package/dist/codegen/types.js +11 -0
  23. package/dist/codegen/types.js.map +1 -0
  24. package/dist/mcp/cache.d.ts +12 -0
  25. package/dist/mcp/cache.js +24 -0
  26. package/dist/mcp/cache.js.map +1 -0
  27. package/dist/mcp/register.d.ts +6 -0
  28. package/dist/mcp/register.js +195 -0
  29. package/dist/mcp/register.js.map +1 -0
  30. package/dist/mcp/summary.d.ts +2 -0
  31. package/dist/mcp/summary.js +36 -0
  32. package/dist/mcp/summary.js.map +1 -0
  33. package/dist/pdf/analyze.d.ts +4 -0
  34. package/dist/pdf/analyze.js +29 -0
  35. package/dist/pdf/analyze.js.map +1 -0
  36. package/dist/pdf/classify.d.ts +8 -0
  37. package/dist/pdf/classify.js +35 -0
  38. package/dist/pdf/classify.js.map +1 -0
  39. package/dist/pdf/command.d.ts +12 -0
  40. package/dist/pdf/command.js +96 -0
  41. package/dist/pdf/command.js.map +1 -0
  42. package/dist/pdf/extract.d.ts +2 -0
  43. package/dist/pdf/extract.js +47 -0
  44. package/dist/pdf/extract.js.map +1 -0
  45. package/dist/pdf/index.d.ts +11 -0
  46. package/dist/pdf/index.js +13 -0
  47. package/dist/pdf/index.js.map +1 -0
  48. package/dist/pdf/interface-kind.d.ts +2 -0
  49. package/dist/pdf/interface-kind.js +46 -0
  50. package/dist/pdf/interface-kind.js.map +1 -0
  51. package/dist/pdf/manufacturer.d.ts +2 -0
  52. package/dist/pdf/manufacturer.js +86 -0
  53. package/dist/pdf/manufacturer.js.map +1 -0
  54. package/dist/pdf/page-map.d.ts +5 -0
  55. package/dist/pdf/page-map.js +52 -0
  56. package/dist/pdf/page-map.js.map +1 -0
  57. package/dist/pdf/part.d.ts +3 -0
  58. package/dist/pdf/part.js +41 -0
  59. package/dist/pdf/part.js.map +1 -0
  60. package/dist/pdf/register-table.d.ts +5 -0
  61. package/dist/pdf/register-table.js +234 -0
  62. package/dist/pdf/register-table.js.map +1 -0
  63. package/dist/pdf/table.d.ts +18 -0
  64. package/dist/pdf/table.js +33 -0
  65. package/dist/pdf/table.js.map +1 -0
  66. package/dist/pdf/types.d.ts +82 -0
  67. package/dist/pdf/types.js +3 -0
  68. package/dist/pdf/types.js.map +1 -0
  69. package/dist/schema/assemble.d.ts +4 -0
  70. package/dist/schema/assemble.js +48 -0
  71. package/dist/schema/assemble.js.map +1 -0
  72. package/dist/schema/index.d.ts +2 -0
  73. package/dist/schema/index.js +4 -0
  74. package/dist/schema/index.js.map +1 -0
  75. package/dist/schema/types.d.ts +51 -0
  76. package/dist/schema/types.js +7 -0
  77. package/dist/schema/types.js.map +1 -0
  78. package/dist/schema/validate.d.ts +2 -0
  79. package/dist/schema/validate.js +84 -0
  80. package/dist/schema/validate.js.map +1 -0
  81. package/dist/server.d.ts +7 -0
  82. package/dist/server.js +49 -0
  83. package/dist/server.js.map +1 -0
  84. package/package.json +59 -0
  85. package/schemas/.gitkeep +0 -0
  86. package/schemas/datasheet.schema.json +109 -0
package/dist/server.js ADDED
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env node
2
+ // Driverge MCP server — entry point.
3
+ //
4
+ // Exposes a stdio MCP server built with @modelcontextprotocol/sdk. Alongside a
5
+ // `ping` health check it registers the full Driverge surface (Session 6):
6
+ // analyze_datasheet / generate_driver / validate_driver / validate_datasheet
7
+ // tools, the datasheet + schema resources, and the generate-driver prompt.
8
+ // See wiki: mcp-tool-usage-flow.
9
+ import { fileURLToPath } from "node:url";
10
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
11
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
12
+ import { z } from "zod";
13
+ import { registerDriverge } from "./mcp/register.js";
14
+ const SERVER_NAME = "driverge-mcp";
15
+ const SERVER_VERSION = "0.0.0";
16
+ /**
17
+ * Build a Driverge MCP server with its tools registered. Kept separate from the
18
+ * transport wiring so tests can drive it over an in-memory transport.
19
+ */
20
+ export function createServer() {
21
+ const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION });
22
+ server.registerTool("ping", {
23
+ title: "Ping",
24
+ description: "Health check — returns 'pong' to confirm the Driverge MCP server is running.",
25
+ inputSchema: { message: z.string().optional() },
26
+ }, async ({ message }) => ({
27
+ content: [
28
+ { type: "text", text: message ? `pong: ${message}` : "pong" },
29
+ ],
30
+ }));
31
+ registerDriverge(server);
32
+ return server;
33
+ }
34
+ async function main() {
35
+ const server = createServer();
36
+ const transport = new StdioServerTransport();
37
+ await server.connect(transport);
38
+ }
39
+ // Start the stdio server only when this file is executed directly (via the
40
+ // `driverge` bin), not when imported — e.g. by the test suite.
41
+ const isDirectRun = process.argv[1] !== undefined &&
42
+ fileURLToPath(import.meta.url) === process.argv[1];
43
+ if (isDirectRun) {
44
+ main().catch((error) => {
45
+ console.error("driverge-mcp failed to start:", error);
46
+ process.exit(1);
47
+ });
48
+ }
49
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA,qCAAqC;AACrC,EAAE;AACF,+EAA+E;AAC/E,0EAA0E;AAC1E,6EAA6E;AAC7E,2EAA2E;AAC3E,iCAAiC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,GAAG,cAAc,CAAC;AACnC,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IAE7E,MAAM,CAAC,YAAY,CACjB,MAAM,EACN;QACE,KAAK,EAAE,MAAM;QACb,WAAW,EACT,8EAA8E;QAChF,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;KAChD,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACtB,OAAO,EAAE;YACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE;SACvE;KACF,CAAC,CACH,CAAC;IAEF,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAEzB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,2EAA2E;AAC3E,+DAA+D;AAC/D,MAAM,WAAW,GACf,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;IAC7B,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAErD,IAAI,WAAW,EAAE,CAAC;IAChB,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC9B,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "driverge-mcp",
3
+ "version": "0.0.0",
4
+ "description": "MCP server that turns IC datasheet PDFs into embedded C/C++ drivers, driven by any MCP client.",
5
+ "keywords": [
6
+ "mcp",
7
+ "model-context-protocol",
8
+ "embedded",
9
+ "datasheet",
10
+ "driver",
11
+ "codegen",
12
+ "stm32",
13
+ "esp32"
14
+ ],
15
+ "license": "MIT",
16
+ "author": "Mehmet Topuz",
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/MehmetTopuz/driverge-mcp.git"
20
+ },
21
+ "bugs": {
22
+ "url": "https://github.com/MehmetTopuz/driverge-mcp/issues"
23
+ },
24
+ "homepage": "https://github.com/MehmetTopuz/driverge-mcp#readme",
25
+ "type": "module",
26
+ "engines": {
27
+ "node": ">=18"
28
+ },
29
+ "bin": {
30
+ "driverge": "dist/server.js"
31
+ },
32
+ "main": "dist/server.js",
33
+ "files": [
34
+ "dist",
35
+ "schemas"
36
+ ],
37
+ "scripts": {
38
+ "build": "tsc",
39
+ "typecheck": "tsc --noEmit",
40
+ "lint": "eslint .",
41
+ "test": "vitest run",
42
+ "test:watch": "vitest",
43
+ "prepublishOnly": "npm run build"
44
+ },
45
+ "devDependencies": {
46
+ "@eslint/js": "^9.39.4",
47
+ "@types/node": "^26.1.0",
48
+ "eslint": "^9.39.4",
49
+ "pdf-lib": "^1.17.1",
50
+ "typescript": "^6.0.3",
51
+ "typescript-eslint": "^8.62.1",
52
+ "vitest": "^4.1.9"
53
+ },
54
+ "dependencies": {
55
+ "@modelcontextprotocol/sdk": "^1.29.0",
56
+ "pdfjs-dist": "^6.1.200",
57
+ "zod": "^4.4.3"
58
+ }
59
+ }
File without changes
@@ -0,0 +1,109 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://driverge.dev/schemas/datasheet.schema.json",
4
+ "title": "Driverge Datasheet",
5
+ "description": "The parsed, validated datasheet handed (by ref) to the host AI. The `interface` field is a discriminated union on `kind`.",
6
+ "type": "object",
7
+ "required": ["metadata", "protocol", "interface", "validation"],
8
+ "additionalProperties": false,
9
+ "properties": {
10
+ "metadata": {
11
+ "type": "object",
12
+ "required": ["part", "manufacturer", "manufacturerConfidence", "pdfType", "pageCount"],
13
+ "additionalProperties": false,
14
+ "properties": {
15
+ "part": { "type": "string" },
16
+ "manufacturer": { "type": "string" },
17
+ "manufacturerConfidence": { "type": "number", "minimum": 0, "maximum": 1 },
18
+ "pdfType": { "enum": ["text_based", "scanned", "mixed"] },
19
+ "pageCount": { "type": "integer", "minimum": 0 }
20
+ }
21
+ },
22
+ "protocol": {
23
+ "type": "object",
24
+ "required": ["bus"],
25
+ "additionalProperties": false,
26
+ "properties": {
27
+ "bus": { "enum": ["I2C", "SPI", "UART", "unknown"] },
28
+ "addresses": { "type": "array", "items": { "type": "string" } },
29
+ "maxClockHz": { "type": "number", "minimum": 0 }
30
+ }
31
+ },
32
+ "interface": {
33
+ "oneOf": [
34
+ {
35
+ "type": "object",
36
+ "required": ["kind", "registers"],
37
+ "additionalProperties": false,
38
+ "properties": {
39
+ "kind": { "const": "register_map" },
40
+ "registers": { "type": "array", "items": { "$ref": "#/definitions/register" } }
41
+ }
42
+ },
43
+ {
44
+ "type": "object",
45
+ "required": ["kind", "commands"],
46
+ "additionalProperties": false,
47
+ "properties": {
48
+ "kind": { "const": "command_set" },
49
+ "commands": { "type": "array", "items": { "$ref": "#/definitions/command" } }
50
+ }
51
+ }
52
+ ]
53
+ },
54
+ "validation": {
55
+ "type": "object",
56
+ "required": ["valid", "errors", "warnings"],
57
+ "additionalProperties": false,
58
+ "properties": {
59
+ "valid": { "type": "boolean" },
60
+ "errors": { "type": "array", "items": { "type": "string" } },
61
+ "warnings": { "type": "array", "items": { "type": "string" } }
62
+ }
63
+ }
64
+ },
65
+ "definitions": {
66
+ "register": {
67
+ "type": "object",
68
+ "required": ["name", "address", "reset", "bitFields"],
69
+ "additionalProperties": false,
70
+ "properties": {
71
+ "name": { "type": "string" },
72
+ "address": { "type": "string" },
73
+ "reset": { "type": "string" },
74
+ "bitFields": { "type": "array", "items": { "$ref": "#/definitions/bitField" } }
75
+ }
76
+ },
77
+ "bitField": {
78
+ "type": "object",
79
+ "required": ["name", "msb", "lsb"],
80
+ "additionalProperties": false,
81
+ "properties": {
82
+ "name": { "type": "string" },
83
+ "msb": { "type": "integer", "minimum": 0, "maximum": 7 },
84
+ "lsb": { "type": "integer", "minimum": 0, "maximum": 7 }
85
+ }
86
+ },
87
+ "command": {
88
+ "type": "object",
89
+ "required": ["name", "code"],
90
+ "additionalProperties": false,
91
+ "properties": {
92
+ "name": { "type": "string" },
93
+ "code": { "type": "string", "pattern": "^0x[0-9A-Fa-f]+$" },
94
+ "params": { "type": "array", "items": { "type": "string" } },
95
+ "responseWords": { "type": "integer", "minimum": 0 },
96
+ "crc": {
97
+ "type": "object",
98
+ "required": ["poly", "init", "width"],
99
+ "additionalProperties": false,
100
+ "properties": {
101
+ "poly": { "type": "string" },
102
+ "init": { "type": "string" },
103
+ "width": { "type": "integer", "minimum": 1 }
104
+ }
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }