ariadne-mcp 0.2.2 → 0.3.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/dist/server.d.ts.map +1 -1
- package/dist/server.js +61 -22
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuBpE,wBAAgB,YAAY,IAAI,SAAS,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuBpE,wBAAgB,YAAY,IAAI,SAAS,CA+LxC"}
|
package/dist/server.js
CHANGED
|
@@ -14,21 +14,34 @@ function createServer() {
|
|
|
14
14
|
name: "ariadne",
|
|
15
15
|
version: "0.1.0",
|
|
16
16
|
});
|
|
17
|
-
server.tool("get_definition", "Find where a symbol
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
server.tool("get_definition", "Find where a symbol (function, class, method, variable) is defined in the codebase. " +
|
|
18
|
+
"Use this as the first step when you need to read an implementation — it gives you the exact file and line so you don't have to search. " +
|
|
19
|
+
"Do not use for fuzzy name searches; use find_symbol instead if you're unsure of the exact name. " +
|
|
20
|
+
"Returns: file path, line number, and signature. If empty, call get_index_status to check if indexing is complete.", {
|
|
21
|
+
symbol: zod_1.z.string().describe("Exact symbol name (e.g. 'processPayment', 'UserService', 'handleLogin')"),
|
|
22
|
+
file: zod_1.z.string().optional().describe("Optional: restrict to this file path when the same name exists in multiple files"),
|
|
20
23
|
}, async ({ symbol, file }) => ({
|
|
21
24
|
content: [
|
|
22
25
|
{ type: "text", text: await (0, index_js_1.handleGetDefinition)((0, db_js_1.getDb)(), { symbol, file }) },
|
|
23
26
|
],
|
|
24
27
|
}));
|
|
25
|
-
server.tool("get_callers", "
|
|
28
|
+
server.tool("get_callers", "Find every place in the codebase that calls or uses a given symbol. " +
|
|
29
|
+
"Use this to understand the blast radius of a change, trace how a function is invoked, or find all usages of a class. " +
|
|
30
|
+
"For classes with no direct call sites, automatically falls back to import and registration sites (e.g. NestJS module registrations). " +
|
|
31
|
+
"Do not use to find where a symbol is defined — use get_definition for that. " +
|
|
32
|
+
"Returns: list of caller symbols with file path and line number.", { symbol: zod_1.z.string().describe("Exact symbol name to find callers for") }, async ({ symbol }) => ({
|
|
26
33
|
content: [{ type: "text", text: await (0, index_js_1.handleGetCallers)((0, db_js_1.getDb)(), { symbol }) }],
|
|
27
34
|
}));
|
|
28
|
-
server.tool("get_callees", "
|
|
35
|
+
server.tool("get_callees", "Find every symbol that a given function or method calls internally. " +
|
|
36
|
+
"Use this to understand what a function depends on, trace data flow downward, or map out a call tree. " +
|
|
37
|
+
"Do not use to find who calls this function — use get_callers for that. " +
|
|
38
|
+
"Returns: list of called symbols with file path and line number.", { symbol: zod_1.z.string().describe("Exact symbol name to inspect") }, async ({ symbol }) => ({
|
|
29
39
|
content: [{ type: "text", text: await (0, index_js_1.handleGetCallees)((0, db_js_1.getDb)(), { symbol }) }],
|
|
30
40
|
}));
|
|
31
|
-
server.tool("get_implementations", "
|
|
41
|
+
server.tool("get_implementations", "Find all classes or functions that implement a given interface or extend an abstract base class. " +
|
|
42
|
+
"Use this to discover concrete implementations when you only know the interface name, or to audit all classes satisfying a contract. " +
|
|
43
|
+
"Do not use for finding call sites — use get_callers for that. " +
|
|
44
|
+
"Returns: list of implementing symbols with file path and line number.", { interface: zod_1.z.string().describe("Interface or abstract class name (e.g. 'LanguageParser', 'Repository')") }, async (args) => ({
|
|
32
45
|
content: [
|
|
33
46
|
{
|
|
34
47
|
type: "text",
|
|
@@ -36,29 +49,44 @@ function createServer() {
|
|
|
36
49
|
},
|
|
37
50
|
],
|
|
38
51
|
}));
|
|
39
|
-
server.tool("get_call_path", "Find the shortest call chain between two symbols."
|
|
40
|
-
|
|
41
|
-
|
|
52
|
+
server.tool("get_call_path", "Find the shortest call chain between two symbols — answers 'how does A eventually reach B?'. " +
|
|
53
|
+
"Use this to trace execution flow across multiple layers (e.g. controller → service → repository). " +
|
|
54
|
+
"Do not use when you just need direct callers or callees — use get_callers or get_callees for that. " +
|
|
55
|
+
"Returns: ordered list of symbols forming the chain, with file and line for each hop. Returns empty if no path exists within 12 hops.", {
|
|
56
|
+
from: zod_1.z.string().describe("Starting symbol name (e.g. 'checkout')"),
|
|
57
|
+
to: zod_1.z.string().describe("Target symbol name (e.g. 'repository.save')"),
|
|
42
58
|
}, async ({ from, to }) => ({
|
|
43
59
|
content: [{ type: "text", text: await (0, index_js_1.handleGetCallPath)((0, db_js_1.getDb)(), { from, to }) }],
|
|
44
60
|
}));
|
|
45
|
-
server.tool("get_references", "Find every
|
|
61
|
+
server.tool("get_references", "Find every edge in the graph that points to a given symbol — includes calls, imports, decorator usages, and type references. " +
|
|
62
|
+
"Use this for a complete picture of all usages, including decorators like @Roles or @Controller that get_callers might miss. " +
|
|
63
|
+
"Do not use when you only want call sites — use get_callers for a cleaner call-only view. " +
|
|
64
|
+
"Returns: list of referencing symbols with file path and line number.", { symbol: zod_1.z.string().describe("Exact symbol name to find all references for") }, async ({ symbol }) => ({
|
|
46
65
|
content: [{ type: "text", text: await (0, index_js_1.handleGetReferences)((0, db_js_1.getDb)(), { symbol }) }],
|
|
47
66
|
}));
|
|
48
|
-
server.tool("get_file_symbols", "
|
|
49
|
-
|
|
50
|
-
|
|
67
|
+
server.tool("get_file_symbols", "List every symbol (function, class, method, variable) defined in a file or directory. " +
|
|
68
|
+
"Use this to get a structural overview of a file before reading it, or to map all symbols in a module directory. " +
|
|
69
|
+
"Use the optional query param to filter by name — e.g. query='password' returns only password-related symbols, avoiding truncation on large directories. " +
|
|
70
|
+
"Do not use to search across the whole codebase — use find_symbol for that. " +
|
|
71
|
+
"Returns: list of symbols with kind, file, line, and signature. Results are capped at 200; use query to narrow down.", {
|
|
72
|
+
file: zod_1.z.string().describe("Repo-relative path to a file (e.g. src/server.ts) or directory (e.g. src/modules/auth)"),
|
|
73
|
+
query: zod_1.z.string().optional().describe("Optional: filter symbols whose name contains this string (case-insensitive)"),
|
|
51
74
|
}, async ({ file, query }) => ({
|
|
52
75
|
content: [{ type: "text", text: await (0, index_js_1.handleGetFileSymbols)((0, db_js_1.getDb)(), { file, query }) }],
|
|
53
76
|
}));
|
|
54
|
-
server.tool("get_type_definition", "Best-effort: find the type or
|
|
77
|
+
server.tool("get_type_definition", "Best-effort: find the type, interface, or class that a symbol's type refers to. " +
|
|
78
|
+
"Use this when you need to understand the shape of a value — e.g. what type does this variable hold. " +
|
|
79
|
+
"Results may be incomplete for complex generic or inferred types. " +
|
|
80
|
+
"Returns: list of candidate type definitions with file and line. May return multiple candidates.", { symbol: zod_1.z.string().describe("Symbol name to look up the type for") }, async ({ symbol }) => ({
|
|
55
81
|
content: [
|
|
56
82
|
{ type: "text", text: await (0, index_js_1.handleGetTypeDefinition)((0, db_js_1.getDb)(), { symbol }) },
|
|
57
83
|
],
|
|
58
84
|
}));
|
|
59
|
-
server.tool("get_source_definition", "Like get_definition but skips barrel/
|
|
60
|
-
symbol
|
|
61
|
-
|
|
85
|
+
server.tool("get_source_definition", "Like get_definition but skips barrel/re-export files (index.ts, index.js) and returns the original source location. " +
|
|
86
|
+
"Use this instead of get_definition when the symbol is re-exported through an index file and you want the actual implementation file. " +
|
|
87
|
+
"Returns: file path, line number, and signature of the original source. Falls back to get_definition result if no non-barrel definition exists.", {
|
|
88
|
+
symbol: zod_1.z.string().describe("Exact symbol name to look up"),
|
|
89
|
+
file: zod_1.z.string().optional().describe("Optional: restrict to this file path"),
|
|
62
90
|
}, async ({ symbol, file }) => ({
|
|
63
91
|
content: [
|
|
64
92
|
{
|
|
@@ -67,18 +95,29 @@ function createServer() {
|
|
|
67
95
|
},
|
|
68
96
|
],
|
|
69
97
|
}));
|
|
70
|
-
server.tool("get_index_status", "Returns the current state of the Ariadne code index. " +
|
|
98
|
+
server.tool("get_index_status", "Returns the current state of the Ariadne code index — whether it is still indexing, ready, or errored. " +
|
|
71
99
|
"IMPORTANT: call this whenever any other Ariadne tool returns empty results or says a symbol was not found. " +
|
|
72
|
-
"If state is not 'ready',
|
|
100
|
+
"If state is not 'ready', the index is still being built — tell the user to wait before retrying. " +
|
|
101
|
+
"Returns: state (starting/detecting/scip-running/loading/ready/error), phase description, symbol count, edge count, and elapsed time.", {}, async () => ({
|
|
73
102
|
content: [{ type: "text", text: (0, index_js_1.handleGetIndexStatus)() }],
|
|
74
103
|
}));
|
|
75
|
-
server.tool("find_symbol", "
|
|
104
|
+
server.tool("find_symbol", "Search for symbols by name across the entire codebase using a substring match. " +
|
|
105
|
+
"Use this when you don't know the exact symbol name — e.g. find_symbol('password') returns all symbols whose name contains 'password', across all files. " +
|
|
106
|
+
"Prefer this over grep or glob for symbol discovery. Use get_definition once you have the exact name. " +
|
|
107
|
+
"Returns: up to 50 matching symbols ordered by relevance (exact match first, then prefix, then substring), with file and line.", { query: zod_1.z.string().describe("Substring to search for in symbol names (case-insensitive, e.g. 'password', 'Auth', 'reset')") }, async ({ query }) => ({
|
|
76
108
|
content: [{ type: "text", text: await (0, index_js_1.handleFindSymbol)((0, db_js_1.getDb)(), { query }) }],
|
|
77
109
|
}));
|
|
78
|
-
server.tool("get_importers", "Find all files that import a given file
|
|
110
|
+
server.tool("get_importers", "Find all files that import a given file — the reverse of an import statement. " +
|
|
111
|
+
"Use this to trace usage upward through the module tree, find all consumers of a service or utility, or assess the impact of changing a file's exports. " +
|
|
112
|
+
"Do not use to find callers of a specific function — use get_callers for that. " +
|
|
113
|
+
"Returns: list of importing symbols (one per file) with file path and line of the import statement.", { file: zod_1.z.string().describe("Repo-relative path to the file being imported (e.g. src/services/auth.ts)") }, async ({ file }) => ({
|
|
79
114
|
content: [{ type: "text", text: await (0, index_js_1.handleGetImporters)((0, db_js_1.getDb)(), { file }) }],
|
|
80
115
|
}));
|
|
81
|
-
server.tool("search_files", "Find all indexed files whose path matches a
|
|
116
|
+
server.tool("search_files", "Find all indexed files whose path matches a glob-style pattern. " +
|
|
117
|
+
"Use this to discover files by name pattern when you don't know the exact path — e.g. search_files('**/*password*') finds all files with 'password' in the filename. " +
|
|
118
|
+
"Replaces glob/find commands. Supports * (matches any chars except /) and ** (matches any path including /). " +
|
|
119
|
+
"Do not use to search file contents or symbol names — use find_symbol for symbols, get_references for usages. " +
|
|
120
|
+
"Returns: list of matching file paths.", { pattern: zod_1.z.string().describe("Glob pattern (e.g. '**/*password*', 'src/modules/**', '**/*.service.ts')") }, async ({ pattern }) => ({
|
|
82
121
|
content: [{ type: "text", text: await (0, index_js_1.handleSearchFiles)((0, db_js_1.getDb)(), { pattern }) }],
|
|
83
122
|
}));
|
|
84
123
|
return server;
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;AAwBA,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|