swagger-doc-explorer-mcp 0.0.1

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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +159 -0
  3. package/dist/constants.d.ts +3 -0
  4. package/dist/constants.d.ts.map +1 -0
  5. package/dist/constants.js +3 -0
  6. package/dist/constants.js.map +1 -0
  7. package/dist/formatters.d.ts +27 -0
  8. package/dist/formatters.d.ts.map +1 -0
  9. package/dist/formatters.js +163 -0
  10. package/dist/formatters.js.map +1 -0
  11. package/dist/index.d.ts +3 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +72 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/services/swagger-service.d.ts +21 -0
  16. package/dist/services/swagger-service.d.ts.map +1 -0
  17. package/dist/services/swagger-service.js +339 -0
  18. package/dist/services/swagger-service.js.map +1 -0
  19. package/dist/tools/info.d.ts +3 -0
  20. package/dist/tools/info.d.ts.map +1 -0
  21. package/dist/tools/info.js +161 -0
  22. package/dist/tools/info.js.map +1 -0
  23. package/dist/tools/load-spec.d.ts +3 -0
  24. package/dist/tools/load-spec.d.ts.map +1 -0
  25. package/dist/tools/load-spec.js +278 -0
  26. package/dist/tools/load-spec.js.map +1 -0
  27. package/dist/tools/paths.d.ts +3 -0
  28. package/dist/tools/paths.d.ts.map +1 -0
  29. package/dist/tools/paths.js +216 -0
  30. package/dist/tools/paths.js.map +1 -0
  31. package/dist/tools/schemas.d.ts +3 -0
  32. package/dist/tools/schemas.d.ts.map +1 -0
  33. package/dist/tools/schemas.js +142 -0
  34. package/dist/tools/schemas.js.map +1 -0
  35. package/dist/tools/search.d.ts +3 -0
  36. package/dist/tools/search.d.ts.map +1 -0
  37. package/dist/tools/search.js +100 -0
  38. package/dist/tools/search.js.map +1 -0
  39. package/dist/types.d.ts +139 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +2 -0
  42. package/dist/types.js.map +1 -0
  43. package/package.json +58 -0
@@ -0,0 +1,142 @@
1
+ import { z } from "zod";
2
+ import { isLoaded, getSchemas, getSchemaDetail, getSpec } from "../services/swagger-service.js";
3
+ import { formatSchema } from "../formatters.js";
4
+ export function registerSchemasTools(server) {
5
+ server.registerTool("swagger_list_schemas", {
6
+ title: "List Component Schemas",
7
+ description: `List all component schemas (data models) defined in the loaded OpenAPI spec.
8
+
9
+ Use this tool to get an overview of all data models used by the API, including their types and number of properties.
10
+
11
+ Args:
12
+ - spec_name (string): Name of the previously loaded spec
13
+ - limit (number): Maximum results to return (default: 50)
14
+ - offset (number): Number of results to skip (default: 0)
15
+
16
+ Returns:
17
+ {
18
+ "total": number, // Total number of schemas
19
+ "count": number, // Number of results in this response
20
+ "offset": number, // Current pagination offset
21
+ "schemas": [{ "name", "type", "description", "properties" }],
22
+ "has_more": boolean,
23
+ "next_offset": number
24
+ }
25
+
26
+ Examples:
27
+ - Use when: "What data models are defined?" -> params with spec_name="<name>"
28
+ - Use when: "Show me all schemas" -> params with spec_name="<name>"
29
+
30
+ Error Handling:
31
+ - Returns error if the spec name has not been loaded yet`,
32
+ inputSchema: z.object({
33
+ spec_name: z.string().min(1).describe("Name of the previously loaded OpenAPI/Swagger spec (use swagger_list_loaded to see available names)"),
34
+ limit: z.number().int().min(1).max(200).default(50).describe("Maximum results to return (default: 50)"),
35
+ offset: z.number().int().min(0).default(0).describe("Number of results to skip for pagination (default: 0)"),
36
+ }).strict(),
37
+ annotations: {
38
+ readOnlyHint: true,
39
+ destructiveHint: false,
40
+ idempotentHint: true,
41
+ openWorldHint: false,
42
+ },
43
+ }, async (params) => {
44
+ try {
45
+ if (!isLoaded(params.spec_name)) {
46
+ return { content: [{ type: "text", text: `Error: Spec '${params.spec_name}' has not been loaded yet. Use swagger_load_spec to load it first.` }] };
47
+ }
48
+ const allSchemas = getSchemas(params.spec_name);
49
+ const total = allSchemas.length;
50
+ const paginated = allSchemas.slice(params.offset, params.offset + params.limit);
51
+ if (paginated.length === 0) {
52
+ const msg = total === 0 ? "No schemas defined in this spec." : `No more schemas to show (offset ${params.offset} of ${total}).`;
53
+ return { content: [{ type: "text", text: msg }] };
54
+ }
55
+ const hasMore = total > params.offset + paginated.length;
56
+ const store = getSpec(params.spec_name);
57
+ const output = {
58
+ total, count: paginated.length, offset: params.offset,
59
+ schemas: paginated, has_more: hasMore,
60
+ ...(hasMore ? { next_offset: params.offset + paginated.length } : {}),
61
+ };
62
+ const lines = [
63
+ `# ${store?.spec.info.title || "API"} - Component Schemas`,
64
+ "",
65
+ `**${total} total schemas** (showing ${paginated.length})`,
66
+ "",
67
+ "| Name | Type | Properties | Description |",
68
+ "|------|------|------------|-------------|",
69
+ ];
70
+ for (const schema of paginated) {
71
+ lines.push(`| \`${schema.name}\` | ${schema.type || "object"} | ${schema.properties} | ${(schema.description || "").slice(0, 80)} |`);
72
+ }
73
+ if (hasMore) {
74
+ lines.push(`\n> Showing ${paginated.length} of ${total} schemas. Use offset=${params.offset + paginated.length} to see more.`);
75
+ }
76
+ lines.push("\nUse `swagger_get_schema` to see full details of a specific schema.");
77
+ return {
78
+ content: [{ type: "text", text: lines.join("\n") }],
79
+ structuredContent: output,
80
+ };
81
+ }
82
+ catch (error) {
83
+ return { content: [{ type: "text", text: error instanceof Error ? error.message : String(error) }] };
84
+ }
85
+ });
86
+ server.registerTool("swagger_get_schema", {
87
+ title: "Get Schema Details",
88
+ description: `Get detailed information about a specific component schema (data model), including all properties, types, constraints, and examples.
89
+
90
+ Use this tool to drill down into a specific data model after using swagger_list_schemas.
91
+
92
+ Args:
93
+ - spec_name (string): Name of the previously loaded spec
94
+ - schema_name (string): Name of the schema/model (e.g., "Pet", "User", "Order", "Error")
95
+
96
+ Returns:
97
+ Formatted output with the full schema definition including type, properties, required fields, enums, constraints, and examples.
98
+
99
+ Examples:
100
+ - Use when: "Show me the Pet model" -> params with spec_name="<name>", schema_name="Pet"
101
+ - Use when: "What fields does the User schema have?" -> params with spec_name="<name>", schema_name="User"
102
+
103
+ Error Handling:
104
+ - Returns error if the spec name has not been loaded
105
+ - Returns error if the schema name is not found, suggesting available schemas`,
106
+ inputSchema: z.object({
107
+ spec_name: z.string().min(1).describe("Name of the previously loaded OpenAPI/Swagger spec (use swagger_list_loaded to see available names)"),
108
+ schema_name: z.string().min(1).describe("Name of the schema/model (e.g., 'Pet', 'User', 'Order', 'Error'). Case-sensitive."),
109
+ }).strict(),
110
+ annotations: {
111
+ readOnlyHint: true,
112
+ destructiveHint: false,
113
+ idempotentHint: true,
114
+ openWorldHint: false,
115
+ },
116
+ }, async (params) => {
117
+ try {
118
+ if (!isLoaded(params.spec_name)) {
119
+ return { content: [{ type: "text", text: `Error: Spec '${params.spec_name}' has not been loaded yet. Use swagger_load_spec to load it first.` }] };
120
+ }
121
+ const schema = getSchemaDetail(params.spec_name, params.schema_name);
122
+ if (!schema) {
123
+ const allSchemas = getSchemas(params.spec_name);
124
+ const suggestions = allSchemas.slice(0, 10).map((s) => s.name);
125
+ return {
126
+ content: [{
127
+ type: "text",
128
+ text: `Error: Schema '${params.schema_name}' not found.\n\nAvailable schemas:\n${suggestions.map((name) => ` - ${name}`).join("\n")}${allSchemas.length > 10 ? "\n ... and more" : ""}`,
129
+ }],
130
+ };
131
+ }
132
+ return {
133
+ content: [{ type: "text", text: [`# Schema: ${params.schema_name}`, "", "```", formatSchema(schema), "```"].join("\n") }],
134
+ structuredContent: schema,
135
+ };
136
+ }
137
+ catch (error) {
138
+ return { content: [{ type: "text", text: error instanceof Error ? error.message : String(error) }] };
139
+ }
140
+ });
141
+ }
142
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/tools/schemas.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ export declare function registerSearchTools(server: McpServer): void;
3
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,QA2GpD"}
@@ -0,0 +1,100 @@
1
+ import { z } from "zod";
2
+ import { isLoaded, searchSpec } from "../services/swagger-service.js";
3
+ export function registerSearchTools(server) {
4
+ server.registerTool("swagger_search", {
5
+ title: "Search API Spec",
6
+ description: `Search across all endpoints and schemas in a loaded OpenAPI spec for a given query string.
7
+
8
+ Searches through endpoint paths, operation summaries, operationIds, descriptions, tags, schema names, and property names.
9
+
10
+ Args:
11
+ - spec_name (string): Name of the previously loaded spec
12
+ - query (string): Search term to find in endpoint paths, summaries, operationIds, tags, schema names, and property descriptions
13
+
14
+ Returns:
15
+ {
16
+ "total": number, // Total number of matches
17
+ "results": [
18
+ {
19
+ "type": "endpoint" | "schema" | "property",
20
+ "path": string, // URL path (for endpoints)
21
+ "method": string, // HTTP method (for endpoints)
22
+ "schemaName": string, // Schema name (for schemas/properties)
23
+ "propertyName": string, // Property name (for properties)
24
+ "match": string, // Human-readable match description
25
+ "summary": string // Brief description
26
+ }
27
+ ]
28
+ }
29
+
30
+ Examples:
31
+ - Use when: "Search for anything about pets" -> params with spec_name="<name>", query="pet"
32
+ - Use when: "Find endpoints related to users" -> params with spec_name="<name>", query="user"
33
+
34
+ Error Handling:
35
+ - Returns error if the spec name has not been loaded`,
36
+ inputSchema: z.object({
37
+ spec_name: z.string().min(1).describe("Name of the previously loaded OpenAPI/Swagger spec (use swagger_list_loaded to see available names)"),
38
+ query: z.string().min(1).max(200).describe("Search term to find in endpoint paths, summaries, operationIds, tags, schema names, and property descriptions"),
39
+ }).strict(),
40
+ annotations: {
41
+ readOnlyHint: true,
42
+ destructiveHint: false,
43
+ idempotentHint: true,
44
+ openWorldHint: false,
45
+ },
46
+ }, async (params) => {
47
+ try {
48
+ if (!isLoaded(params.spec_name)) {
49
+ return { content: [{ type: "text", text: `Error: Spec '${params.spec_name}' has not been loaded yet. Use swagger_load_spec to load it first.` }] };
50
+ }
51
+ const results = searchSpec(params.spec_name, params.query);
52
+ if (results.length === 0) {
53
+ return {
54
+ content: [{
55
+ type: "text",
56
+ text: `No results found for '${params.query}'. Try a different search term or browse the spec with swagger_list_paths and swagger_list_schemas.`,
57
+ }],
58
+ };
59
+ }
60
+ const endpoints = results.filter((r) => r.type === "endpoint");
61
+ const schemas = results.filter((r) => r.type === "schema");
62
+ const properties = results.filter((r) => r.type === "property");
63
+ const lines = [
64
+ `# Search Results for '${params.query}'`,
65
+ "",
66
+ `Found ${results.length} matches`,
67
+ "",
68
+ ];
69
+ if (endpoints.length > 0) {
70
+ lines.push(`## Endpoints (${endpoints.length})`);
71
+ for (const ep of endpoints) {
72
+ lines.push(`- **${ep.method?.toUpperCase()}** \`${ep.path}\` - ${ep.summary || ""}`);
73
+ }
74
+ lines.push("");
75
+ }
76
+ if (schemas.length > 0) {
77
+ lines.push(`## Schemas (${schemas.length})`);
78
+ for (const s of schemas) {
79
+ lines.push(`- **${s.schemaName}** - ${s.summary || ""}`);
80
+ }
81
+ lines.push("");
82
+ }
83
+ if (properties.length > 0) {
84
+ lines.push(`## Properties (${properties.length})`);
85
+ for (const p of properties) {
86
+ lines.push(`- \`${p.schemaName}.${p.propertyName}\` - ${p.summary || ""}`);
87
+ }
88
+ lines.push("");
89
+ }
90
+ return {
91
+ content: [{ type: "text", text: lines.join("\n") }],
92
+ structuredContent: { total: results.length, query: params.query, results },
93
+ };
94
+ }
95
+ catch (error) {
96
+ return { content: [{ type: "text", text: error instanceof Error ? error.message : String(error) }] };
97
+ }
98
+ });
99
+ }
100
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ export interface SpecStore {
2
+ spec: OpenApiSpec;
3
+ name: string;
4
+ source: string;
5
+ loadedAt: string;
6
+ }
7
+ export interface OpenApiSpec {
8
+ openapi?: string;
9
+ swagger?: string;
10
+ info: {
11
+ title: string;
12
+ version: string;
13
+ description?: string;
14
+ };
15
+ paths: Record<string, PathItem>;
16
+ components?: {
17
+ schemas?: Record<string, SchemaObject>;
18
+ };
19
+ definitions?: Record<string, SchemaObject>;
20
+ tags?: Array<{
21
+ name: string;
22
+ description?: string;
23
+ }>;
24
+ servers?: Array<{
25
+ url: string;
26
+ description?: string;
27
+ }>;
28
+ host?: string;
29
+ basePath?: string;
30
+ schemes?: string[];
31
+ }
32
+ export interface PathItem {
33
+ summary?: string;
34
+ description?: string;
35
+ get?: OperationObject;
36
+ post?: OperationObject;
37
+ put?: OperationObject;
38
+ patch?: OperationObject;
39
+ delete?: OperationObject;
40
+ options?: OperationObject;
41
+ head?: OperationObject;
42
+ parameters?: ParameterObject[];
43
+ }
44
+ export interface OperationObject {
45
+ summary?: string;
46
+ description?: string;
47
+ operationId?: string;
48
+ tags?: string[];
49
+ parameters?: ParameterObject[];
50
+ requestBody?: RequestBodyObject;
51
+ responses?: Record<string, ResponseObject>;
52
+ deprecated?: boolean;
53
+ security?: Array<Record<string, string[]>>;
54
+ }
55
+ export interface ParameterObject {
56
+ name: string;
57
+ in: "query" | "path" | "header" | "cookie";
58
+ description?: string;
59
+ required?: boolean;
60
+ deprecated?: boolean;
61
+ allowEmptyValue?: boolean;
62
+ schema?: SchemaObject;
63
+ type?: string;
64
+ items?: SchemaObject;
65
+ enum?: string[];
66
+ example?: unknown;
67
+ }
68
+ export interface RequestBodyObject {
69
+ description?: string;
70
+ required?: boolean;
71
+ content: Record<string, MediaTypeObject>;
72
+ }
73
+ export interface MediaTypeObject {
74
+ schema?: SchemaObject;
75
+ example?: unknown;
76
+ examples?: Record<string, unknown>;
77
+ }
78
+ export interface ResponseObject {
79
+ description: string;
80
+ content?: Record<string, MediaTypeObject>;
81
+ headers?: Record<string, ParameterObject>;
82
+ }
83
+ export interface SchemaObject {
84
+ [key: string]: unknown;
85
+ type?: string;
86
+ format?: string;
87
+ properties?: Record<string, SchemaObject>;
88
+ items?: SchemaObject;
89
+ required?: string[];
90
+ enum?: string[];
91
+ description?: string;
92
+ example?: unknown;
93
+ default?: unknown;
94
+ nullable?: boolean;
95
+ oneOf?: SchemaObject[];
96
+ anyOf?: SchemaObject[];
97
+ allOf?: SchemaObject[];
98
+ $ref?: string;
99
+ additionalProperties?: boolean | SchemaObject;
100
+ minLength?: number;
101
+ maxLength?: number;
102
+ minimum?: number;
103
+ maximum?: number;
104
+ pattern?: string;
105
+ readOnly?: boolean;
106
+ writeOnly?: boolean;
107
+ xml?: Record<string, unknown>;
108
+ externalDocs?: {
109
+ url: string;
110
+ description?: string;
111
+ };
112
+ title?: string;
113
+ deprecated?: boolean;
114
+ }
115
+ export type HttpMethod = "get" | "post" | "put" | "patch" | "delete" | "options" | "head";
116
+ export interface EndpointSummary {
117
+ path: string;
118
+ method: HttpMethod;
119
+ summary: string;
120
+ operationId?: string;
121
+ tags: string[];
122
+ deprecated: boolean;
123
+ }
124
+ export interface SchemaSummary {
125
+ name: string;
126
+ type?: string;
127
+ description?: string;
128
+ properties: number;
129
+ }
130
+ export interface SearchResult {
131
+ type: "endpoint" | "schema" | "property";
132
+ path?: string;
133
+ method?: HttpMethod;
134
+ schemaName?: string;
135
+ propertyName?: string;
136
+ match: string;
137
+ summary?: string;
138
+ }
139
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "swagger-doc-explorer-mcp",
3
+ "version": "0.0.1",
4
+ "description": "MCP server for progressive exploration of Swagger/OpenAPI documentation",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "swagger-doc-explorer-mcp": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "start": "node dist/index.js",
15
+ "start:http": "SWAGGER_HTTP_PORT=3000 node dist/index.js",
16
+ "dev": "tsx watch src/index.ts",
17
+ "dev:http": "SWAGGER_HTTP_PORT=3000 tsx src/index.ts",
18
+ "build": "tsc",
19
+ "clean": "rm -rf dist",
20
+ "test": "node --import tsx --test test/**/*.test.ts",
21
+ "prepublishOnly": "npm run build && npm test"
22
+ },
23
+ "keywords": [
24
+ "mcp",
25
+ "model-context-protocol",
26
+ "swagger",
27
+ "openapi",
28
+ "api-explorer",
29
+ "documentation"
30
+ ],
31
+ "author": "anuoua",
32
+ "license": "MIT",
33
+ "engines": {
34
+ "node": ">=18"
35
+ },
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "git+https://github.com/anuoua/swagger-doc-explorer-mcp.git"
39
+ },
40
+ "homepage": "https://github.com/anuoua/swagger-doc-explorer-mcp#readme",
41
+ "bugs": {
42
+ "url": "https://github.com/anuoua/swagger-doc-explorer-mcp/issues"
43
+ },
44
+ "publishConfig": {
45
+ "access": "public"
46
+ },
47
+ "packageManager": "pnpm@10.30.3",
48
+ "dependencies": {
49
+ "@modelcontextprotocol/sdk": "^1.6.1",
50
+ "axios": "^1.7.9",
51
+ "zod": "^3.23.8"
52
+ },
53
+ "devDependencies": {
54
+ "@types/node": "^22.10.0",
55
+ "tsx": "^4.19.2",
56
+ "typescript": "^5.7.2"
57
+ }
58
+ }