@assemblyline-agents/docs 2.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.
- package/LICENSE +21 -0
- package/README.md +13 -0
- package/dist/corpus.json +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +210 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp.d.ts +7 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +137 -0
- package/dist/mcp.js.map +1 -0
- package/package.json +50 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export declare const ASSEMBLY_LINE_LATEST_DOCS_URL = "https://assemblyline.artificialillumination.co/api/agent-docs";
|
|
2
|
+
export interface DocsHeading {
|
|
3
|
+
depth: number;
|
|
4
|
+
title: string;
|
|
5
|
+
anchor: string;
|
|
6
|
+
}
|
|
7
|
+
export interface DocsPage {
|
|
8
|
+
id: string;
|
|
9
|
+
sourcePath: string;
|
|
10
|
+
title: string;
|
|
11
|
+
description: string;
|
|
12
|
+
url: string;
|
|
13
|
+
rawUrl: string;
|
|
14
|
+
headings: DocsHeading[];
|
|
15
|
+
content: string;
|
|
16
|
+
}
|
|
17
|
+
export interface DocsCorpus {
|
|
18
|
+
schemaVersion: 1;
|
|
19
|
+
frameworkVersion: string;
|
|
20
|
+
revision: string;
|
|
21
|
+
pages: DocsPage[];
|
|
22
|
+
}
|
|
23
|
+
export type DocsPageSummary = Pick<DocsPage, "id" | "title" | "description" | "url">;
|
|
24
|
+
export interface DocsSearchResult extends DocsPageSummary {
|
|
25
|
+
score: number;
|
|
26
|
+
snippet: string;
|
|
27
|
+
}
|
|
28
|
+
export interface DocsReadResult {
|
|
29
|
+
page: DocsPageSummary;
|
|
30
|
+
section?: string;
|
|
31
|
+
markdown: string;
|
|
32
|
+
}
|
|
33
|
+
export interface DiagnosticDocumentation {
|
|
34
|
+
id: string;
|
|
35
|
+
url: string;
|
|
36
|
+
}
|
|
37
|
+
export declare function loadBundledDocs(): DocsCorpus;
|
|
38
|
+
export declare function loadLatestDocs(url?: string, fetcher?: typeof fetch): Promise<DocsCorpus>;
|
|
39
|
+
export declare function listDocs(corpus?: DocsCorpus): DocsPageSummary[];
|
|
40
|
+
export declare function searchDocs(query: string, options?: {
|
|
41
|
+
corpus?: DocsCorpus;
|
|
42
|
+
limit?: number;
|
|
43
|
+
}): DocsSearchResult[];
|
|
44
|
+
export declare function readDoc(reference: string, corpus?: DocsCorpus): DocsReadResult;
|
|
45
|
+
export declare function documentationForDiagnostic(code: string, corpus?: DocsCorpus): DiagnosticDocumentation;
|
|
46
|
+
export declare function docsCatalogText(corpus?: DocsCorpus): string;
|
|
47
|
+
export declare function parseDocsCorpus(value: unknown): DocsCorpus;
|
|
48
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,6BAA6B,kEACuB,CAAC;AAElE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,CAAC,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,GAAG,OAAO,GAAG,aAAa,GAAG,KAAK,CAAC,CAAC;AAErF,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;AAID,wBAAgB,eAAe,IAAI,UAAU,CAK5C;AAED,wBAAsB,cAAc,CAClC,GAAG,SAAsE,EACzE,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC,UAAU,CAAC,CAOrB;AAED,wBAAgB,QAAQ,CAAC,MAAM,GAAE,UAA8B,GAAG,eAAe,EAAE,CAElF;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,UAAU,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GACpD,gBAAgB,EAAE,CA8BpB;AAED,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,GAAE,UAA8B,GAAG,cAAc,CAgBjG;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,MAAM,GAAE,UAA8B,GACrC,uBAAuB,CAoBzB;AAED,wBAAgB,eAAe,CAAC,MAAM,GAAE,UAA8B,GAAG,MAAM,CAW9E;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAiB1D"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
export const ASSEMBLY_LINE_LATEST_DOCS_URL = "https://assemblyline.artificialillumination.co/api/agent-docs";
|
|
3
|
+
let bundledCorpus;
|
|
4
|
+
export function loadBundledDocs() {
|
|
5
|
+
if (bundledCorpus)
|
|
6
|
+
return bundledCorpus;
|
|
7
|
+
const raw = readFileSync(new URL("./corpus.json", import.meta.url), "utf8");
|
|
8
|
+
bundledCorpus = parseDocsCorpus(JSON.parse(raw));
|
|
9
|
+
return bundledCorpus;
|
|
10
|
+
}
|
|
11
|
+
export async function loadLatestDocs(url = process.env.ASSEMBLY_LINE_DOCS_URL ?? ASSEMBLY_LINE_LATEST_DOCS_URL, fetcher = fetch) {
|
|
12
|
+
const response = await fetcher(url, {
|
|
13
|
+
headers: { accept: "application/json" },
|
|
14
|
+
signal: AbortSignal.timeout(10_000)
|
|
15
|
+
});
|
|
16
|
+
if (!response.ok)
|
|
17
|
+
throw new Error(`Latest Assembly Line docs request failed with HTTP ${response.status}.`);
|
|
18
|
+
return parseDocsCorpus(await response.json());
|
|
19
|
+
}
|
|
20
|
+
export function listDocs(corpus = loadBundledDocs()) {
|
|
21
|
+
return corpus.pages.map(pageSummary);
|
|
22
|
+
}
|
|
23
|
+
export function searchDocs(query, options = {}) {
|
|
24
|
+
const corpus = options.corpus ?? loadBundledDocs();
|
|
25
|
+
const phrase = normalize(query);
|
|
26
|
+
const terms = [...new Set(phrase.split(/\s+/u).filter((term) => term.length > 1))];
|
|
27
|
+
if (terms.length === 0)
|
|
28
|
+
return [];
|
|
29
|
+
const matches = [];
|
|
30
|
+
for (const page of corpus.pages) {
|
|
31
|
+
const title = normalize(page.title);
|
|
32
|
+
const description = normalize(page.description);
|
|
33
|
+
const id = normalize(page.id);
|
|
34
|
+
const headings = normalize(page.headings.map((heading) => heading.title).join(" "));
|
|
35
|
+
const content = normalize(page.content);
|
|
36
|
+
if (!terms.some((term) => `${id} ${title} ${description} ${headings} ${content}`.includes(term)))
|
|
37
|
+
continue;
|
|
38
|
+
let score = 0;
|
|
39
|
+
if (title.includes(phrase))
|
|
40
|
+
score += 120;
|
|
41
|
+
if (id.includes(phrase))
|
|
42
|
+
score += 100;
|
|
43
|
+
if (description.includes(phrase))
|
|
44
|
+
score += 60;
|
|
45
|
+
if (headings.includes(phrase))
|
|
46
|
+
score += 45;
|
|
47
|
+
for (const term of terms) {
|
|
48
|
+
if (title.includes(term))
|
|
49
|
+
score += 30;
|
|
50
|
+
if (id.includes(term))
|
|
51
|
+
score += 24;
|
|
52
|
+
if (description.includes(term))
|
|
53
|
+
score += 14;
|
|
54
|
+
if (headings.includes(term))
|
|
55
|
+
score += 10;
|
|
56
|
+
score += Math.min(occurrences(content, term), 8);
|
|
57
|
+
}
|
|
58
|
+
matches.push({ ...pageSummary(page), score, snippet: searchSnippet(page, terms) });
|
|
59
|
+
}
|
|
60
|
+
return matches
|
|
61
|
+
.sort((a, b) => b.score - a.score || a.title.localeCompare(b.title))
|
|
62
|
+
.slice(0, clamp(options.limit ?? 8, 1, 50));
|
|
63
|
+
}
|
|
64
|
+
export function readDoc(reference, corpus = loadBundledDocs()) {
|
|
65
|
+
const [rawId, rawSection] = reference.split("#", 2);
|
|
66
|
+
const id = rawId?.replace(/^docs\//u, "").replace(/\.md$/u, "") ?? "";
|
|
67
|
+
const page = corpus.pages.find((candidate) => candidate.id === id
|
|
68
|
+
|| candidate.sourcePath.replace(/\.md$/u, "") === id
|
|
69
|
+
|| normalize(candidate.title) === normalize(id));
|
|
70
|
+
if (!page)
|
|
71
|
+
throw new Error(`Unknown Assembly Line documentation page: ${rawId}.`);
|
|
72
|
+
if (!rawSection)
|
|
73
|
+
return { page: pageSummary(page), markdown: page.content };
|
|
74
|
+
const section = decodeURIComponent(rawSection);
|
|
75
|
+
return {
|
|
76
|
+
page: pageSummary(page),
|
|
77
|
+
section,
|
|
78
|
+
markdown: readSection(page, section)
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export function documentationForDiagnostic(code, corpus = loadBundledDocs()) {
|
|
82
|
+
const rules = [
|
|
83
|
+
[/instruction/iu, "agent-stack/instructions"],
|
|
84
|
+
[/(agent|model|reasoning|output)/iu, "agent-stack/agent-ts"],
|
|
85
|
+
[/context/iu, "agent-stack/context-ts"],
|
|
86
|
+
[/(gateway|adapter)/iu, "agent-stack/gateway-ts"],
|
|
87
|
+
[/tool/iu, "agent-stack/tools"],
|
|
88
|
+
[/skill/iu, "agent-stack/skills"],
|
|
89
|
+
[/channel/iu, "agent-stack/channels"],
|
|
90
|
+
[/hook/iu, "agent-stack/hooks"],
|
|
91
|
+
[/(automation|schedule|trigger)/iu, "agent-stack/automations"],
|
|
92
|
+
[/connection/iu, "agent-stack/connections"],
|
|
93
|
+
[/sandbox/iu, "agent-stack/sandbox"],
|
|
94
|
+
[/subagent/iu, "agent-stack/subagents"],
|
|
95
|
+
[/instrumentation/iu, "agent-stack/instrumentation"],
|
|
96
|
+
[/(provider|preflight|deploy|environment)/iu, "runtime-and-deployment"]
|
|
97
|
+
];
|
|
98
|
+
const id = rules.find(([pattern]) => pattern.test(code))?.[1] ?? "troubleshooting";
|
|
99
|
+
const page = corpus.pages.find((candidate) => candidate.id === id);
|
|
100
|
+
return { id, url: page?.url ?? `https://assemblyline.artificialillumination.co/docs/${id}` };
|
|
101
|
+
}
|
|
102
|
+
export function docsCatalogText(corpus = loadBundledDocs()) {
|
|
103
|
+
return [
|
|
104
|
+
"# Assembly Line developer documentation",
|
|
105
|
+
"",
|
|
106
|
+
`Framework version: ${corpus.frameworkVersion}`,
|
|
107
|
+
`Documentation revision: ${corpus.revision}`,
|
|
108
|
+
"",
|
|
109
|
+
"Use the page list to choose a narrow source instead of loading the full manual.",
|
|
110
|
+
"",
|
|
111
|
+
...corpus.pages.map((page) => `- [${page.title}](${page.url}): ${page.description}`)
|
|
112
|
+
].join("\n");
|
|
113
|
+
}
|
|
114
|
+
export function parseDocsCorpus(value) {
|
|
115
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
116
|
+
throw new Error("Invalid Assembly Line docs corpus.");
|
|
117
|
+
const candidate = value;
|
|
118
|
+
if (candidate.schemaVersion !== 1 || typeof candidate.frameworkVersion !== "string"
|
|
119
|
+
|| typeof candidate.revision !== "string" || !Array.isArray(candidate.pages)) {
|
|
120
|
+
throw new Error("Unsupported Assembly Line docs corpus.");
|
|
121
|
+
}
|
|
122
|
+
for (const page of candidate.pages) {
|
|
123
|
+
if (!page || typeof page !== "object"
|
|
124
|
+
|| !strings(page, ["id", "sourcePath", "title", "description", "url", "rawUrl", "content"])
|
|
125
|
+
|| !Array.isArray(page.headings)
|
|
126
|
+
|| !page.headings.every((heading) => heading && typeof heading === "object"
|
|
127
|
+
&& typeof heading.depth === "number" && strings(heading, ["title", "anchor"]))) {
|
|
128
|
+
throw new Error("Invalid Assembly Line docs page.");
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return candidate;
|
|
132
|
+
}
|
|
133
|
+
function pageSummary(page) {
|
|
134
|
+
return {
|
|
135
|
+
id: page.id,
|
|
136
|
+
title: page.title,
|
|
137
|
+
description: page.description,
|
|
138
|
+
url: page.url
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
function strings(value, keys) {
|
|
142
|
+
const record = value;
|
|
143
|
+
return keys.every((key) => typeof record[key] === "string");
|
|
144
|
+
}
|
|
145
|
+
function normalize(value) {
|
|
146
|
+
return value.toLowerCase().replace(/[^\p{L}\p{N}]+/gu, " ").trim();
|
|
147
|
+
}
|
|
148
|
+
function occurrences(value, term) {
|
|
149
|
+
let count = 0;
|
|
150
|
+
let offset = 0;
|
|
151
|
+
while ((offset = value.indexOf(term, offset)) >= 0) {
|
|
152
|
+
count += 1;
|
|
153
|
+
offset += term.length;
|
|
154
|
+
}
|
|
155
|
+
return count;
|
|
156
|
+
}
|
|
157
|
+
function searchSnippet(page, terms) {
|
|
158
|
+
const plain = page.content
|
|
159
|
+
.replace(/```[\s\S]*?```/gu, " ")
|
|
160
|
+
.replace(/[#>*_`|\[\]()]/gu, " ")
|
|
161
|
+
.replace(/\s+/gu, " ")
|
|
162
|
+
.trim();
|
|
163
|
+
const lower = plain.toLowerCase();
|
|
164
|
+
const indexes = terms.map((term) => lower.indexOf(term)).filter((index) => index >= 0);
|
|
165
|
+
const match = indexes.length > 0 ? Math.min(...indexes) : 0;
|
|
166
|
+
const start = Math.max(0, match - 90);
|
|
167
|
+
const end = Math.min(plain.length, start + 260);
|
|
168
|
+
return `${start > 0 ? "…" : ""}${plain.slice(start, end).trim()}${end < plain.length ? "…" : ""}`;
|
|
169
|
+
}
|
|
170
|
+
function readSection(page, requested) {
|
|
171
|
+
const heading = page.headings.find((candidate) => candidate.anchor === requested || normalize(candidate.title) === normalize(requested));
|
|
172
|
+
if (!heading)
|
|
173
|
+
throw new Error(`Unknown section "${requested}" in ${page.id}.`);
|
|
174
|
+
const lines = page.content.split("\n");
|
|
175
|
+
const counts = new Map();
|
|
176
|
+
let start = -1;
|
|
177
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
178
|
+
const parsed = headingFromLine(lines[index] ?? "", counts);
|
|
179
|
+
if (!parsed)
|
|
180
|
+
continue;
|
|
181
|
+
if (start < 0 && parsed.anchor === heading.anchor) {
|
|
182
|
+
start = index;
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
if (start >= 0 && parsed.depth <= heading.depth)
|
|
186
|
+
return lines.slice(start, index).join("\n").trimEnd();
|
|
187
|
+
}
|
|
188
|
+
if (start >= 0)
|
|
189
|
+
return lines.slice(start).join("\n").trimEnd();
|
|
190
|
+
throw new Error(`Could not extract section "${requested}" from ${page.id}.`);
|
|
191
|
+
}
|
|
192
|
+
function headingFromLine(line, counts) {
|
|
193
|
+
const match = /^(#{1,6})\s+(.+?)\s*#*$/u.exec(line);
|
|
194
|
+
if (!match)
|
|
195
|
+
return undefined;
|
|
196
|
+
const title = match[2]?.trim() ?? "";
|
|
197
|
+
const base = title
|
|
198
|
+
.toLowerCase()
|
|
199
|
+
.replace(/[`*_~]/gu, "")
|
|
200
|
+
.replace(/[^\p{L}\p{N}\s-]/gu, "")
|
|
201
|
+
.trim()
|
|
202
|
+
.replace(/[\s-]+/gu, "-");
|
|
203
|
+
const count = counts.get(base) ?? 0;
|
|
204
|
+
counts.set(base, count + 1);
|
|
205
|
+
return { depth: match[1]?.length ?? 1, title, anchor: count === 0 ? base : `${base}-${count}` };
|
|
206
|
+
}
|
|
207
|
+
function clamp(value, minimum, maximum) {
|
|
208
|
+
return Math.min(maximum, Math.max(minimum, Math.trunc(value)));
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
|
+
import { type DocsCorpus } from "./index.js";
|
|
3
|
+
export declare function createDocsMcpServer(corpus?: DocsCorpus): Server;
|
|
4
|
+
export declare function startDocsMcpStdio(corpus?: DocsCorpus): Promise<void>;
|
|
5
|
+
export declare function handleDocsMcpRequest(request: Request, corpus?: DocsCorpus): Promise<Response>;
|
|
6
|
+
export declare function docsMcpCatalog(corpus?: DocsCorpus): string;
|
|
7
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAWnE,OAAO,EAML,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;AA2CpB,wBAAgB,mBAAmB,CAAC,MAAM,GAAE,UAA8B,GAAG,MAAM,CAiDlF;AAED,wBAAsB,iBAAiB,CAAC,MAAM,GAAE,UAA8B,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7F;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,UAA8B,GACrC,OAAO,CAAC,QAAQ,CAAC,CAMnB;AAED,wBAAgB,cAAc,CAAC,MAAM,GAAE,UAA8B,GAAG,MAAM,CAE7E"}
|
package/dist/mcp.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
|
|
4
|
+
import { CallToolRequestSchema, ListResourcesRequestSchema, ListToolsRequestSchema, ReadResourceRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
+
import { docsCatalogText, listDocs, loadBundledDocs, readDoc, searchDocs } from "./index.js";
|
|
6
|
+
const READ_ONLY_ANNOTATIONS = {
|
|
7
|
+
readOnlyHint: true,
|
|
8
|
+
destructiveHint: false,
|
|
9
|
+
idempotentHint: true,
|
|
10
|
+
openWorldHint: false
|
|
11
|
+
};
|
|
12
|
+
const TOOLS = [
|
|
13
|
+
{
|
|
14
|
+
name: "assembly_line_docs_search",
|
|
15
|
+
description: "Search version-matched Assembly Line developer documentation before authoring or changing an agent.",
|
|
16
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
17
|
+
inputSchema: {
|
|
18
|
+
type: "object",
|
|
19
|
+
required: ["query"],
|
|
20
|
+
properties: {
|
|
21
|
+
query: { type: "string", minLength: 1 },
|
|
22
|
+
limit: { type: "integer", minimum: 1, maximum: 20 }
|
|
23
|
+
},
|
|
24
|
+
additionalProperties: false
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: "assembly_line_docs_read",
|
|
29
|
+
description: "Read one Assembly Line documentation page or a specific page section by id#anchor.",
|
|
30
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
31
|
+
inputSchema: {
|
|
32
|
+
type: "object",
|
|
33
|
+
required: ["id"],
|
|
34
|
+
properties: { id: { type: "string", minLength: 1 } },
|
|
35
|
+
additionalProperties: false
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
name: "assembly_line_docs_list",
|
|
40
|
+
description: "List the compact Assembly Line documentation catalog and bundled framework version.",
|
|
41
|
+
annotations: READ_ONLY_ANNOTATIONS,
|
|
42
|
+
inputSchema: { type: "object", properties: {}, additionalProperties: false }
|
|
43
|
+
}
|
|
44
|
+
];
|
|
45
|
+
export function createDocsMcpServer(corpus = loadBundledDocs()) {
|
|
46
|
+
const server = new Server({ name: "assembly-line-docs", version: corpus.frameworkVersion }, {
|
|
47
|
+
capabilities: { tools: {}, resources: {} },
|
|
48
|
+
instructions: "Search first, then read only the Assembly Line documentation pages needed for the current authoring task."
|
|
49
|
+
});
|
|
50
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: TOOLS }));
|
|
51
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
52
|
+
try {
|
|
53
|
+
const input = recordValue(request.params.arguments);
|
|
54
|
+
if (request.params.name === "assembly_line_docs_search") {
|
|
55
|
+
const query = stringValue(input.query, "query");
|
|
56
|
+
const limit = typeof input.limit === "number" ? input.limit : undefined;
|
|
57
|
+
return toolResult(searchDocs(query, { corpus, ...(limit === undefined ? {} : { limit }) }));
|
|
58
|
+
}
|
|
59
|
+
if (request.params.name === "assembly_line_docs_read") {
|
|
60
|
+
return toolResult(readDoc(stringValue(input.id, "id"), corpus).markdown);
|
|
61
|
+
}
|
|
62
|
+
if (request.params.name === "assembly_line_docs_list") {
|
|
63
|
+
return toolResult({
|
|
64
|
+
frameworkVersion: corpus.frameworkVersion,
|
|
65
|
+
revision: corpus.revision,
|
|
66
|
+
pages: listDocs(corpus)
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
throw new Error(`Unknown Assembly Line docs tool: ${request.params.name}`);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
return toolResult({ error: error instanceof Error ? error.message : String(error) }, true);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => ({
|
|
76
|
+
resources: listDocs(corpus).map((page) => ({
|
|
77
|
+
uri: resourceUri(corpus.frameworkVersion, page.id),
|
|
78
|
+
name: page.id,
|
|
79
|
+
title: page.title,
|
|
80
|
+
description: page.description,
|
|
81
|
+
mimeType: "text/markdown"
|
|
82
|
+
}))
|
|
83
|
+
}));
|
|
84
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
85
|
+
const id = idFromResourceUri(request.params.uri);
|
|
86
|
+
const doc = readDoc(id, corpus);
|
|
87
|
+
return {
|
|
88
|
+
contents: [{ uri: request.params.uri, mimeType: "text/markdown", text: doc.markdown }]
|
|
89
|
+
};
|
|
90
|
+
});
|
|
91
|
+
return server;
|
|
92
|
+
}
|
|
93
|
+
export async function startDocsMcpStdio(corpus = loadBundledDocs()) {
|
|
94
|
+
await createDocsMcpServer(corpus).connect(new StdioServerTransport());
|
|
95
|
+
}
|
|
96
|
+
export async function handleDocsMcpRequest(request, corpus = loadBundledDocs()) {
|
|
97
|
+
const transport = new WebStandardStreamableHTTPServerTransport({
|
|
98
|
+
enableJsonResponse: true
|
|
99
|
+
});
|
|
100
|
+
await createDocsMcpServer(corpus).connect(transport);
|
|
101
|
+
return transport.handleRequest(request);
|
|
102
|
+
}
|
|
103
|
+
export function docsMcpCatalog(corpus = loadBundledDocs()) {
|
|
104
|
+
return docsCatalogText(corpus);
|
|
105
|
+
}
|
|
106
|
+
function toolResult(value, isError = false) {
|
|
107
|
+
const result = {
|
|
108
|
+
content: [{
|
|
109
|
+
type: "text",
|
|
110
|
+
text: typeof value === "string" ? value : JSON.stringify(value, null, 2)
|
|
111
|
+
}]
|
|
112
|
+
};
|
|
113
|
+
if (isError)
|
|
114
|
+
result.isError = true;
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
function recordValue(value) {
|
|
118
|
+
return value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
119
|
+
}
|
|
120
|
+
function stringValue(value, name) {
|
|
121
|
+
if (typeof value !== "string" || value.trim().length === 0)
|
|
122
|
+
throw new Error(`${name} must be a non-empty string.`);
|
|
123
|
+
return value;
|
|
124
|
+
}
|
|
125
|
+
function resourceUri(version, id) {
|
|
126
|
+
return `assembly-line-docs://${encodeURIComponent(version)}/${encodeURIComponent(id)}`;
|
|
127
|
+
}
|
|
128
|
+
function idFromResourceUri(uri) {
|
|
129
|
+
const parsed = new URL(uri);
|
|
130
|
+
if (parsed.protocol !== "assembly-line-docs:")
|
|
131
|
+
throw new Error(`Unsupported docs resource URI: ${uri}`);
|
|
132
|
+
const id = decodeURIComponent(parsed.pathname.replace(/^\//u, ""));
|
|
133
|
+
if (!id)
|
|
134
|
+
throw new Error(`Docs resource URI omitted an id: ${uri}`);
|
|
135
|
+
return id;
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=mcp.js.map
|
package/dist/mcp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,wCAAwC,EAAE,MAAM,+DAA+D,CAAC;AACzH,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,EAG1B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,eAAe,EACf,QAAQ,EACR,eAAe,EACf,OAAO,EACP,UAAU,EAEX,MAAM,YAAY,CAAC;AAEpB,MAAM,qBAAqB,GAAG;IAC5B,YAAY,EAAE,IAAI;IAClB,eAAe,EAAE,KAAK;IACtB,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,KAAK;CACrB,CAAC;AAEF,MAAM,KAAK,GAAW;IACpB;QACE,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,qGAAqG;QAClH,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,OAAO,CAAC;YACnB,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE;gBACvC,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;aACpD;YACD,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,oFAAoF;QACjG,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,IAAI,CAAC;YAChB,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE;YACpD,oBAAoB,EAAE,KAAK;SAC5B;KACF;IACD;QACE,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,qFAAqF;QAClG,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,oBAAoB,EAAE,KAAK,EAAE;KAC7E;CACF,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,SAAqB,eAAe,EAAE;IACxE,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,CAAC,gBAAgB,EAAE,EAChE;QACE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QAC1C,YAAY,EAAE,2GAA2G;KAC1H,CACF,CAAC;IACF,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpD,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,2BAA2B,EAAE,CAAC;gBACxD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBAChD,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;gBACxE,OAAO,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9F,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;gBACtD,OAAO,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC3E,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,yBAAyB,EAAE,CAAC;gBACtD,OAAO,UAAU,CAAC;oBAChB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;oBACzC,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC;iBACxB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,iBAAiB,CAAC,0BAA0B,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAChE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzC,GAAG,EAAE,WAAW,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,EAAE,CAAC;YAClD,IAAI,EAAE,IAAI,CAAC,EAAE;YACb,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,QAAQ,EAAE,eAAe;SAC1B,CAAC,CAAC;KACJ,CAAC,CAAC,CAAC;IACJ,MAAM,CAAC,iBAAiB,CAAC,yBAAyB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACpE,MAAM,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAChC,OAAO;YACL,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;SACvF,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAqB,eAAe,EAAE;IAC5E,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAgB,EAChB,SAAqB,eAAe,EAAE;IAEtC,MAAM,SAAS,GAAG,IAAI,wCAAwC,CAAC;QAC7D,kBAAkB,EAAE,IAAI;KACzB,CAAC,CAAC;IACH,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrD,OAAO,SAAS,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAqB,eAAe,EAAE;IACnE,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,OAAO,GAAG,KAAK;IACjD,MAAM,MAAM,GAAmB;QAC7B,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;aACzE,CAAC;KACH,CAAC;IACF,IAAI,OAAO;QAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IACjC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,SAAS,WAAW,CAAC,KAAc,EAAE,IAAY;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,8BAA8B,CAAC,CAAC;IACnH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,EAAU;IAC9C,OAAO,wBAAwB,kBAAkB,CAAC,OAAO,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;AACzF,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,MAAM,CAAC,QAAQ,KAAK,qBAAqB;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;IACxG,MAAM,EAAE,GAAG,kBAAkB,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IACnE,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAC;IACpE,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@assemblyline-agents/docs",
|
|
3
|
+
"version": "2.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": {
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"default": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"./mcp": {
|
|
11
|
+
"types": "./dist/mcp.d.ts",
|
|
12
|
+
"default": "./dist/mcp.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@modelcontextprotocol/sdk": "^1.25.2"
|
|
17
|
+
},
|
|
18
|
+
"description": "Version-matched Assembly Line developer documentation and read-only docs MCP server.",
|
|
19
|
+
"files": [
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": ">=22.19.0"
|
|
24
|
+
},
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+https://github.com/jasonbadeaux/assembly-line.git",
|
|
29
|
+
"directory": "packages/docs"
|
|
30
|
+
},
|
|
31
|
+
"bugs": {
|
|
32
|
+
"url": "https://github.com/jasonbadeaux/assembly-line/issues"
|
|
33
|
+
},
|
|
34
|
+
"homepage": "https://assemblyline.artificialillumination.co/docs",
|
|
35
|
+
"author": "Assembly Line contributors",
|
|
36
|
+
"keywords": [
|
|
37
|
+
"assembly-line",
|
|
38
|
+
"ai",
|
|
39
|
+
"agents",
|
|
40
|
+
"documentation",
|
|
41
|
+
"mcp"
|
|
42
|
+
],
|
|
43
|
+
"publishConfig": {
|
|
44
|
+
"access": "public"
|
|
45
|
+
},
|
|
46
|
+
"scripts": {
|
|
47
|
+
"build": "node scripts/build.mjs",
|
|
48
|
+
"check": "tsc -p tsconfig.json --noEmit"
|
|
49
|
+
}
|
|
50
|
+
}
|