smart-web-mcp 0.5.22 → 0.5.23
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/CHANGELOG.md +10 -0
- package/README.md +12 -0
- package/dist/dev-runtime.d.ts +7 -0
- package/dist/dev-runtime.js +72 -0
- package/dist/dev-runtime.js.map +1 -0
- package/dist/dev.d.ts +2 -0
- package/dist/dev.js +20 -0
- package/dist/dev.js.map +1 -0
- package/dist/index.js +12 -181
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.d.ts +12 -0
- package/dist/mcp-server.js +171 -0
- package/dist/mcp-server.js.map +1 -0
- package/package.json +6 -3
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,16 @@ The format is based on Keep a Changelog[^1] and this project uses SemVer.
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.5.23] - 2026-03-27
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- local repo checkouts now have a `smart-web-dev` entrypoint that hot-swaps rebuilt `dist/*.js` implementation modules between tool calls, so ordinary implementation changes can land in an already-running MCP session without restarting OpenCode
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- LinkedIn profile crawling now treats `smartcrawl.limit` as a best-effort recent public post count more accurately by deduping duplicate activity variants before gating fallback, backfilling when direct crawl found fewer unique posts than requested, and tightening ownership checks for `feed/update` discoveries
|
|
18
|
+
|
|
9
19
|
## [0.5.22] - 2026-03-27
|
|
10
20
|
|
|
11
21
|
### Fixed
|
package/README.md
CHANGED
|
@@ -136,6 +136,7 @@ Everything else lives in the same JSON file as advanced overrides rather than ex
|
|
|
136
136
|
|
|
137
137
|
- [Claude Code](examples/claude.mcp.json)
|
|
138
138
|
- [OpenCode](examples/opencode.json)
|
|
139
|
+
- [OpenCode dev hot-reload](examples/opencode.dev.json)
|
|
139
140
|
- [Settings template](examples/smart-web.settings.json)
|
|
140
141
|
|
|
141
142
|
These examples use `/absolute/path/to/...` placeholders for local checkouts.
|
|
@@ -149,6 +150,17 @@ npm run check
|
|
|
149
150
|
|
|
150
151
|
`npm install` also installs local git hooks for fast TypeScript checks on commit and the full verification suite on push.
|
|
151
152
|
|
|
153
|
+
### Dev MCP without restarting OpenCode
|
|
154
|
+
|
|
155
|
+
If you run `smart-web` from a local repo checkout, you can use the dev entrypoint so normal implementation changes are picked up after a rebuild without restarting the MCP host:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
npm run dev:watch
|
|
159
|
+
smart-web-dev
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
`smart-web-dev` hot-swaps the latest rebuilt `dist/*.js` modules on each tool call. That means existing tool implementations update after `tsc` rebuilds, but adding brand-new tools or changing tool schemas still needs a client reconnect because MCP tool registration happens at process start.
|
|
163
|
+
|
|
152
164
|
## License
|
|
153
165
|
|
|
154
166
|
MIT
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SmartWebRuntime } from "./mcp-server.js";
|
|
2
|
+
type LoaderOptions = {
|
|
3
|
+
importer?: (href: string) => Promise<Record<string, unknown>>;
|
|
4
|
+
};
|
|
5
|
+
export declare function createVersionedModuleLoader(baseDir: string, options?: LoaderOptions): (relativePath: string) => Promise<Record<string, unknown>>;
|
|
6
|
+
export declare function createReloadingRuntime(baseDir: string): SmartWebRuntime;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { copyFile, mkdtemp, mkdir, readdir, rm, stat } from "node:fs/promises";
|
|
2
|
+
import { join, relative, resolve, dirname } from "node:path";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { pathToFileURL } from "node:url";
|
|
5
|
+
async function collectRuntimeFiles(rootDir, currentDir = rootDir) {
|
|
6
|
+
const entries = await readdir(currentDir, { withFileTypes: true });
|
|
7
|
+
const files = [];
|
|
8
|
+
for (const entry of entries) {
|
|
9
|
+
const absolutePath = join(currentDir, entry.name);
|
|
10
|
+
if (entry.isDirectory()) {
|
|
11
|
+
files.push(...await collectRuntimeFiles(rootDir, absolutePath));
|
|
12
|
+
continue;
|
|
13
|
+
}
|
|
14
|
+
if (!/\.(?:[cm]?js|json)$/i.test(entry.name))
|
|
15
|
+
continue;
|
|
16
|
+
files.push(relative(rootDir, absolutePath));
|
|
17
|
+
}
|
|
18
|
+
return files.sort();
|
|
19
|
+
}
|
|
20
|
+
async function fingerprintRuntime(rootDir, files) {
|
|
21
|
+
const parts = [];
|
|
22
|
+
for (const file of files) {
|
|
23
|
+
const fileStat = await stat(resolve(rootDir, file));
|
|
24
|
+
parts.push(`${file}:${fileStat.mtimeMs}:${fileStat.size}`);
|
|
25
|
+
}
|
|
26
|
+
return parts.join("|");
|
|
27
|
+
}
|
|
28
|
+
async function createSnapshot(rootDir, files) {
|
|
29
|
+
const snapshotDir = await mkdtemp(join(tmpdir(), "smart-web-dev-dist-"));
|
|
30
|
+
for (const file of files) {
|
|
31
|
+
const source = resolve(rootDir, file);
|
|
32
|
+
const target = resolve(snapshotDir, file);
|
|
33
|
+
await mkdir(dirname(target), { recursive: true });
|
|
34
|
+
await copyFile(source, target);
|
|
35
|
+
}
|
|
36
|
+
return snapshotDir;
|
|
37
|
+
}
|
|
38
|
+
export function createVersionedModuleLoader(baseDir, options) {
|
|
39
|
+
const importer = options?.importer || (async (href) => import(href));
|
|
40
|
+
let snapshot;
|
|
41
|
+
return async function load(relativePath) {
|
|
42
|
+
const files = await collectRuntimeFiles(baseDir);
|
|
43
|
+
const fingerprint = await fingerprintRuntime(baseDir, files);
|
|
44
|
+
if (!snapshot || snapshot.fingerprint !== fingerprint) {
|
|
45
|
+
const dir = await createSnapshot(baseDir, files);
|
|
46
|
+
if (snapshot)
|
|
47
|
+
await rm(snapshot.dir, { recursive: true, force: true }).catch(() => { });
|
|
48
|
+
snapshot = { fingerprint, dir, modules: new Map() };
|
|
49
|
+
}
|
|
50
|
+
const modulePath = resolve(snapshot.dir, relativePath);
|
|
51
|
+
const cached = snapshot.modules.get(modulePath);
|
|
52
|
+
if (cached)
|
|
53
|
+
return cached;
|
|
54
|
+
const value = await importer(pathToFileURL(modulePath).href);
|
|
55
|
+
snapshot.modules.set(modulePath, value);
|
|
56
|
+
return value;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export function createReloadingRuntime(baseDir) {
|
|
60
|
+
const load = createVersionedModuleLoader(baseDir);
|
|
61
|
+
return {
|
|
62
|
+
runSmartcrawl: async (...args) => (await load("./smartcrawl.js")).runSmartcrawl(...args),
|
|
63
|
+
renderSmartcrawl: async (...args) => (await load("./smartcrawl.js")).renderSmartcrawl(...args),
|
|
64
|
+
runSmartdocscrawl: async (...args) => (await load("./smartdocscrawl.js")).runSmartdocscrawl(...args),
|
|
65
|
+
renderSmartdocscrawl: async (...args) => (await load("./smartdocscrawl.js")).renderSmartdocscrawl(...args),
|
|
66
|
+
runSmartfetch: async (...args) => (await load("./smartfetch.js")).runSmartfetch(...args),
|
|
67
|
+
renderSmartfetch: async (...args) => (await load("./smartfetch.js")).renderSmartfetch(...args),
|
|
68
|
+
runSmartsearch: async (...args) => (await load("./smartsearch.js")).runSmartsearch(...args),
|
|
69
|
+
renderSmartsearch: async (...args) => (await load("./smartsearch.js")).renderSmartsearch(...args),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=dev-runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-runtime.js","sourceRoot":"","sources":["../src/dev-runtime.ts"],"names":[],"mappings":"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"}
|
package/dist/dev.d.ts
ADDED
package/dist/dev.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from "node:fs";
|
|
3
|
+
import { dirname } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
6
|
+
import { createReloadingRuntime } from "./dev-runtime.js";
|
|
7
|
+
import { createSmartWebServer } from "./mcp-server.js";
|
|
8
|
+
const packageVersion = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8")).version;
|
|
9
|
+
const distDir = dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
async function main() {
|
|
11
|
+
const runtime = createReloadingRuntime(distDir);
|
|
12
|
+
const server = createSmartWebServer(`${packageVersion}-dev`, runtime);
|
|
13
|
+
const transport = new StdioServerTransport();
|
|
14
|
+
await server.connect(transport);
|
|
15
|
+
}
|
|
16
|
+
main().catch((error) => {
|
|
17
|
+
console.error(error);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
});
|
|
20
|
+
//# sourceMappingURL=dev.js.map
|
package/dist/dev.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../src/dev.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAEhF,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,OAAiB,CAAA;AACtH,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;AAEvD,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAC/C,MAAM,MAAM,GAAG,oBAAoB,CAAC,GAAG,cAAc,MAAM,EAAE,OAAO,CAAC,CAAA;IACrE,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AACjC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,191 +1,22 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { readFileSync } from "node:fs";
|
|
3
|
-
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
4
3
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
5
|
-
import {
|
|
4
|
+
import { createSmartWebServer } from "./mcp-server.js";
|
|
6
5
|
import { initSettings, settingsPath, settingsTemplate } from "./settings.js";
|
|
7
6
|
import { renderSmartcrawl, runSmartcrawl } from "./smartcrawl.js";
|
|
8
7
|
import { renderSmartdocscrawl, runSmartdocscrawl } from "./smartdocscrawl.js";
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
8
|
+
import { renderSmartfetch, runSmartfetch } from "./smartfetch.js";
|
|
9
|
+
import { renderSmartsearch, runSmartsearch } from "./smartsearch.js";
|
|
11
10
|
const packageVersion = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8")).version;
|
|
12
|
-
const server =
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
numResults: z.number().int().min(1).max(20).optional().describe("Number of search results to return"),
|
|
22
|
-
type: z.enum(["auto", "fast", "deep"]).optional().describe("Search depth hint"),
|
|
23
|
-
contextMaxCharacters: z.number().int().min(1000).max(20000).optional().describe("Maximum snippet/context size hint"),
|
|
24
|
-
site_crawl: z.boolean().optional().describe("After search, hand off into smartcrawl when a crawl_url or site: operator is available"),
|
|
25
|
-
crawl_url: z.string().optional().describe("Optional starting URL for the smartcrawl handoff"),
|
|
26
|
-
crawl_mode: z.enum(["auto", "board", "docs"]).optional().describe("Traversal hint for the smartcrawl handoff"),
|
|
27
|
-
crawl_limit: z.number().int().min(1).max(50).optional().describe("Maximum ranked crawl results to return in the handoff summary"),
|
|
28
|
-
crawl_max_pages: z.number().int().min(1).max(20).optional().describe("Maximum number of pages to visit during the crawl handoff"),
|
|
29
|
-
crawl_max_depth: z.number().int().min(0).max(3).optional().describe("Maximum recursive depth for the crawl handoff"),
|
|
30
|
-
crawl_timeout_ms: z.number().int().min(3000).max(120000).optional().describe("Per-page timeout for the crawl handoff"),
|
|
31
|
-
},
|
|
32
|
-
annotations: {
|
|
33
|
-
title: "Smart Search",
|
|
34
|
-
readOnlyHint: true,
|
|
35
|
-
destructiveHint: false,
|
|
36
|
-
idempotentHint: true,
|
|
37
|
-
openWorldHint: true,
|
|
38
|
-
},
|
|
39
|
-
}, async ({ query, numResults, type, contextMaxCharacters, site_crawl, crawl_url, crawl_mode, crawl_limit, crawl_max_pages, crawl_max_depth, crawl_timeout_ms }) => {
|
|
40
|
-
const output = await runSmartsearch({
|
|
41
|
-
query,
|
|
42
|
-
...(numResults === undefined ? {} : { numResults }),
|
|
43
|
-
...(type === undefined ? {} : { searchType: type }),
|
|
44
|
-
...(contextMaxCharacters === undefined ? {} : { contextMaxCharacters }),
|
|
45
|
-
...(site_crawl === undefined ? {} : { siteCrawl: site_crawl }),
|
|
46
|
-
...(crawl_url === undefined ? {} : { crawlUrl: crawl_url }),
|
|
47
|
-
...(crawl_mode === undefined ? {} : { crawlMode: crawl_mode }),
|
|
48
|
-
...(crawl_limit === undefined ? {} : { crawlLimit: crawl_limit }),
|
|
49
|
-
...(crawl_max_pages === undefined ? {} : { crawlMaxPages: crawl_max_pages }),
|
|
50
|
-
...(crawl_max_depth === undefined ? {} : { crawlMaxDepth: crawl_max_depth }),
|
|
51
|
-
...(crawl_timeout_ms === undefined ? {} : { crawlTimeoutMs: crawl_timeout_ms }),
|
|
52
|
-
});
|
|
53
|
-
return {
|
|
54
|
-
structuredContent: output,
|
|
55
|
-
content: [{ type: "text", text: renderSmartsearch(output) }],
|
|
56
|
-
};
|
|
57
|
-
});
|
|
58
|
-
server.registerTool("smartcrawl", {
|
|
59
|
-
title: "Smart Crawl",
|
|
60
|
-
description: "Traverse a known site when one page is not enough and you need multiple relevant docs pages, posts, or thread items. Start from a concrete site URL; if you need to discover the site first, use smartsearch, and if you only need one direct URL, use smartfetch. For LinkedIn profile URLs this is best-effort recent public post discovery, not full archive pagination.",
|
|
61
|
-
inputSchema: {
|
|
62
|
-
url: z.string().min(1).describe("Starting site or docs URL to explore. Use this when you need multiple pages from one site, not a single direct URL fetch."),
|
|
63
|
-
query: z.string().optional().describe("Optional topic filter used to rank crawl results"),
|
|
64
|
-
mode: z.enum(["auto", "board", "docs"]).optional().describe("Traversal hint for boards, docs sites, or automatic detection"),
|
|
65
|
-
limit: z.number().int().min(1).max(50).optional().describe("Maximum number of ranked results to return. For LinkedIn profile URLs this acts like a best-effort recent public post count."),
|
|
66
|
-
max_pages: z.number().int().min(1).max(20).optional().describe("Maximum number of pages to visit during exploration"),
|
|
67
|
-
max_depth: z.number().int().min(0).max(3).optional().describe("Maximum recursive depth from the starting URL"),
|
|
68
|
-
include_patterns: z.array(z.string().min(1)).max(20).optional().describe("Optional regex or substring patterns for URLs to keep"),
|
|
69
|
-
exclude_patterns: z.array(z.string().min(1)).max(20).optional().describe("Optional regex or substring patterns for URLs to skip"),
|
|
70
|
-
same_origin_only: z.boolean().optional().describe("Restrict traversal to the starting origin while still surfacing external item links"),
|
|
71
|
-
follow_pagination: z.boolean().optional().describe("Follow next or more-style pagination links during exploration"),
|
|
72
|
-
scroll_steps: z.number().int().min(0).max(12).optional().describe("How many scroll attempts to use for scroll-driven pages"),
|
|
73
|
-
timeout_ms: z.number().int().min(3000).max(120000).optional().describe("Crawl timeout budget per page"),
|
|
74
|
-
format: z.enum(["json", "text", "markdown"]).optional().describe("Text rendering format for the human-readable content"),
|
|
75
|
-
},
|
|
76
|
-
annotations: {
|
|
77
|
-
title: "Smart Crawl",
|
|
78
|
-
readOnlyHint: true,
|
|
79
|
-
destructiveHint: false,
|
|
80
|
-
idempotentHint: true,
|
|
81
|
-
openWorldHint: true,
|
|
82
|
-
},
|
|
83
|
-
}, async ({ url, query, mode, limit, max_pages, max_depth, include_patterns, exclude_patterns, same_origin_only, follow_pagination, scroll_steps, timeout_ms, format, }) => {
|
|
84
|
-
const output = await runSmartcrawl({
|
|
85
|
-
url,
|
|
86
|
-
...(query === undefined ? {} : { query }),
|
|
87
|
-
...(mode === undefined ? {} : { mode }),
|
|
88
|
-
...(limit === undefined ? {} : { limit }),
|
|
89
|
-
...(max_pages === undefined ? {} : { maxPages: max_pages }),
|
|
90
|
-
...(max_depth === undefined ? {} : { maxDepth: max_depth }),
|
|
91
|
-
...(include_patterns === undefined ? {} : { includePatterns: include_patterns }),
|
|
92
|
-
...(exclude_patterns === undefined ? {} : { excludePatterns: exclude_patterns }),
|
|
93
|
-
...(same_origin_only === undefined ? {} : { sameOriginOnly: same_origin_only }),
|
|
94
|
-
...(follow_pagination === undefined ? {} : { followPagination: follow_pagination }),
|
|
95
|
-
...(scroll_steps === undefined ? {} : { scrollSteps: scroll_steps }),
|
|
96
|
-
...(timeout_ms === undefined ? {} : { timeoutMs: timeout_ms }),
|
|
97
|
-
});
|
|
98
|
-
const requestedFormat = format || "json";
|
|
99
|
-
return {
|
|
100
|
-
structuredContent: output,
|
|
101
|
-
content: [
|
|
102
|
-
{
|
|
103
|
-
type: "text",
|
|
104
|
-
text: requestedFormat === "json" ? JSON.stringify(output, null, 2) : renderSmartcrawl(output, requestedFormat),
|
|
105
|
-
},
|
|
106
|
-
],
|
|
107
|
-
};
|
|
108
|
-
});
|
|
109
|
-
server.registerTool("smartdocscrawl", {
|
|
110
|
-
title: "Smart Docs Crawl",
|
|
111
|
-
description: "Mirror a docs-style site into local Markdown files when you want a reusable offline folder instead of a ranked crawl summary.",
|
|
112
|
-
inputSchema: {
|
|
113
|
-
url: z.string().min(1).describe("Starting docs URL to mirror into Markdown. Prefer a docs home or section root, not a one-off article."),
|
|
114
|
-
output_dir: z.string().min(1).describe("Local directory where Markdown files, a README summary, and a crawl manifest should be written."),
|
|
115
|
-
query: z.string().optional().describe("Optional topic filter used to prioritize which docs pages get crawled first"),
|
|
116
|
-
max_pages: z.number().int().min(1).max(200).optional().describe("Maximum number of docs pages to visit while building the local Markdown folder"),
|
|
117
|
-
max_depth: z.number().int().min(0).max(20).optional().describe("Maximum crawl depth from the starting docs page"),
|
|
118
|
-
include_patterns: z.array(z.string().min(1)).max(50).optional().describe("Optional regex or substring patterns for URLs to keep in the docs export"),
|
|
119
|
-
exclude_patterns: z.array(z.string().min(1)).max(50).optional().describe("Optional regex or substring patterns for URLs to skip in the docs export"),
|
|
120
|
-
same_origin_only: z.boolean().optional().describe("Restrict traversal to the starting origin while still exporting only local Markdown files"),
|
|
121
|
-
follow_pagination: z.boolean().optional().describe("Follow next-page style links when the docs site splits sections across pages"),
|
|
122
|
-
scroll_steps: z.number().int().min(0).max(12).optional().describe("How aggressively to scroll rendered docs pages before snapshotting content"),
|
|
123
|
-
timeout_ms: z.number().int().min(3000).max(120000).optional().describe("Per-page timeout budget in milliseconds"),
|
|
124
|
-
},
|
|
125
|
-
annotations: {
|
|
126
|
-
title: "Smart Docs Crawl",
|
|
127
|
-
readOnlyHint: false,
|
|
128
|
-
destructiveHint: true,
|
|
129
|
-
idempotentHint: false,
|
|
130
|
-
openWorldHint: true,
|
|
131
|
-
},
|
|
132
|
-
}, async ({ url, output_dir, query, max_pages, max_depth, include_patterns, exclude_patterns, same_origin_only, follow_pagination, scroll_steps, timeout_ms }) => {
|
|
133
|
-
const output = await runSmartdocscrawl({
|
|
134
|
-
url,
|
|
135
|
-
outputDir: output_dir,
|
|
136
|
-
...(query === undefined ? {} : { query }),
|
|
137
|
-
...(max_pages === undefined ? {} : { maxPages: max_pages }),
|
|
138
|
-
...(max_depth === undefined ? {} : { maxDepth: max_depth }),
|
|
139
|
-
...(include_patterns === undefined ? {} : { includePatterns: include_patterns }),
|
|
140
|
-
...(exclude_patterns === undefined ? {} : { excludePatterns: exclude_patterns }),
|
|
141
|
-
...(same_origin_only === undefined ? {} : { sameOriginOnly: same_origin_only }),
|
|
142
|
-
...(follow_pagination === undefined ? {} : { followPagination: follow_pagination }),
|
|
143
|
-
...(scroll_steps === undefined ? {} : { scrollSteps: scroll_steps }),
|
|
144
|
-
...(timeout_ms === undefined ? {} : { timeoutMs: timeout_ms }),
|
|
145
|
-
});
|
|
146
|
-
return {
|
|
147
|
-
structuredContent: output,
|
|
148
|
-
content: [{ type: "text", text: renderSmartdocscrawl(output) }],
|
|
149
|
-
};
|
|
150
|
-
});
|
|
151
|
-
server.registerTool("smartfetch", {
|
|
152
|
-
title: "Smart Fetch",
|
|
153
|
-
description: "Fetch and normalize one known URL or shortlink. Use this first for direct user-supplied URLs, browser-rendered pages, social posts, and videos; do not use smartsearch when the user already provided the URL, and use smartcrawl only when you need multiple pages from the same site.",
|
|
154
|
-
inputSchema: {
|
|
155
|
-
url: z.string().min(1).describe("Direct URL or shortlink to fetch. Prefer this tool when the user already supplied a URL."),
|
|
156
|
-
target: z.enum(["auto", "generic", "reddit_post", "x_post", "threads_post", "instagram_post", "telegram_post", "dcinside_post", "youtube_video", "naver_blog", "naver_cafe_post", "tistory_post", "velog_post", "hackernews_post", "linkedin_post"]).optional().describe("Content type hint"),
|
|
157
|
-
timeout_ms: z.number().int().min(3000).max(120000).optional().describe("Fetch timeout in milliseconds"),
|
|
158
|
-
download: z.boolean().optional().describe("Prefer a downloadable asset result when the URL or discovered assets point to a file"),
|
|
159
|
-
force_dynamic: z.boolean().optional().describe("Skip light fetches and go straight to Playwright"),
|
|
160
|
-
strict_schema: z.boolean().optional().describe("Return schema-safe fallback output when normalization breaks"),
|
|
161
|
-
format: z.enum(["json", "text", "markdown"]).optional().describe("Text rendering format for the human-readable content"),
|
|
162
|
-
},
|
|
163
|
-
annotations: {
|
|
164
|
-
title: "Smart Fetch",
|
|
165
|
-
readOnlyHint: true,
|
|
166
|
-
destructiveHint: false,
|
|
167
|
-
idempotentHint: true,
|
|
168
|
-
openWorldHint: true,
|
|
169
|
-
},
|
|
170
|
-
}, async ({ url, target, timeout_ms, download, force_dynamic, strict_schema, format }) => {
|
|
171
|
-
const output = await runSmartfetch({
|
|
172
|
-
url,
|
|
173
|
-
...(target === undefined ? {} : { target }),
|
|
174
|
-
...(timeout_ms === undefined ? {} : { timeoutMs: timeout_ms }),
|
|
175
|
-
...(download === undefined ? {} : { download }),
|
|
176
|
-
...(force_dynamic === undefined ? {} : { forceDynamic: force_dynamic }),
|
|
177
|
-
...(strict_schema === undefined ? {} : { strictSchema: strict_schema }),
|
|
178
|
-
});
|
|
179
|
-
const requestedFormat = format || "json";
|
|
180
|
-
return {
|
|
181
|
-
structuredContent: output,
|
|
182
|
-
content: [
|
|
183
|
-
{
|
|
184
|
-
type: "text",
|
|
185
|
-
text: requestedFormat === "json" ? JSON.stringify(output, null, 2) : renderSmartfetch(output, requestedFormat),
|
|
186
|
-
},
|
|
187
|
-
],
|
|
188
|
-
};
|
|
11
|
+
const server = createSmartWebServer(packageVersion, {
|
|
12
|
+
runSmartcrawl,
|
|
13
|
+
renderSmartcrawl,
|
|
14
|
+
runSmartdocscrawl,
|
|
15
|
+
renderSmartdocscrawl,
|
|
16
|
+
runSmartfetch,
|
|
17
|
+
renderSmartfetch,
|
|
18
|
+
runSmartsearch,
|
|
19
|
+
renderSmartsearch,
|
|
189
20
|
});
|
|
190
21
|
async function main() {
|
|
191
22
|
const args = process.argv.slice(2);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAA;AAEhF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEpE,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,OAAiB,CAAA;AAEtH,MAAM,MAAM,GAAG,oBAAoB,CAAC,cAAc,EAAE;IAClD,aAAa;IACb,gBAAgB;IAChB,iBAAiB;IACjB,oBAAoB;IACpB,aAAa;IACb,gBAAgB;IAChB,cAAc;IACd,iBAAiB;CAClB,CAAC,CAAA;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QACxD,OAAM;IACR,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAA;QAC3B,OAAM;IACR,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACjD,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAA;QACrC,MAAM,IAAI,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,CAAA;QAClF,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;QAC3D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACxB,OAAM;IACR,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAA;IAC5C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;AACjC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
export type SmartWebRuntime = {
|
|
3
|
+
runSmartcrawl: typeof import("./smartcrawl.js").runSmartcrawl;
|
|
4
|
+
renderSmartcrawl: (...args: Parameters<typeof import("./smartcrawl.js").renderSmartcrawl>) => string | Promise<string>;
|
|
5
|
+
runSmartdocscrawl: typeof import("./smartdocscrawl.js").runSmartdocscrawl;
|
|
6
|
+
renderSmartdocscrawl: (...args: Parameters<typeof import("./smartdocscrawl.js").renderSmartdocscrawl>) => string | Promise<string>;
|
|
7
|
+
runSmartfetch: typeof import("./smartfetch.js").runSmartfetch;
|
|
8
|
+
renderSmartfetch: (...args: Parameters<typeof import("./smartfetch.js").renderSmartfetch>) => string | Promise<string>;
|
|
9
|
+
runSmartsearch: typeof import("./smartsearch.js").runSmartsearch;
|
|
10
|
+
renderSmartsearch: (...args: Parameters<typeof import("./smartsearch.js").renderSmartsearch>) => string | Promise<string>;
|
|
11
|
+
};
|
|
12
|
+
export declare function createSmartWebServer(version: string, runtime: SmartWebRuntime): McpServer;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
export function createSmartWebServer(version, runtime) {
|
|
4
|
+
const server = new McpServer({ name: "smart-web", version });
|
|
5
|
+
server.registerTool("smartsearch", {
|
|
6
|
+
title: "Smart Search",
|
|
7
|
+
description: "Search the web when the user gave a topic, keywords, or a `site:` query instead of a specific URL. Use this for discovery first; if you already have a direct URL, use smartfetch instead. Can optionally hand off into smartcrawl for same-site exploration.",
|
|
8
|
+
inputSchema: {
|
|
9
|
+
query: z.string().min(1).describe("Search-engine style query. Use this when the user gave a topic or keywords rather than a direct URL."),
|
|
10
|
+
numResults: z.number().int().min(1).max(20).optional().describe("Number of search results to return"),
|
|
11
|
+
type: z.enum(["auto", "fast", "deep"]).optional().describe("Search depth hint"),
|
|
12
|
+
contextMaxCharacters: z.number().int().min(1000).max(20000).optional().describe("Maximum snippet/context size hint"),
|
|
13
|
+
site_crawl: z.boolean().optional().describe("After search, hand off into smartcrawl when a crawl_url or site: operator is available"),
|
|
14
|
+
crawl_url: z.string().optional().describe("Optional starting URL for the smartcrawl handoff"),
|
|
15
|
+
crawl_mode: z.enum(["auto", "board", "docs"]).optional().describe("Traversal hint for the smartcrawl handoff"),
|
|
16
|
+
crawl_limit: z.number().int().min(1).max(50).optional().describe("Maximum ranked crawl results to return in the handoff summary"),
|
|
17
|
+
crawl_max_pages: z.number().int().min(1).max(20).optional().describe("Maximum number of pages to visit during the crawl handoff"),
|
|
18
|
+
crawl_max_depth: z.number().int().min(0).max(3).optional().describe("Maximum recursive depth for the crawl handoff"),
|
|
19
|
+
crawl_timeout_ms: z.number().int().min(3000).max(120000).optional().describe("Per-page timeout for the crawl handoff"),
|
|
20
|
+
},
|
|
21
|
+
annotations: {
|
|
22
|
+
title: "Smart Search",
|
|
23
|
+
readOnlyHint: true,
|
|
24
|
+
destructiveHint: false,
|
|
25
|
+
idempotentHint: true,
|
|
26
|
+
openWorldHint: true,
|
|
27
|
+
},
|
|
28
|
+
}, async ({ query, numResults, type, contextMaxCharacters, site_crawl, crawl_url, crawl_mode, crawl_limit, crawl_max_pages, crawl_max_depth, crawl_timeout_ms }) => {
|
|
29
|
+
const output = await runtime.runSmartsearch({
|
|
30
|
+
query,
|
|
31
|
+
...(numResults === undefined ? {} : { numResults }),
|
|
32
|
+
...(type === undefined ? {} : { searchType: type }),
|
|
33
|
+
...(contextMaxCharacters === undefined ? {} : { contextMaxCharacters }),
|
|
34
|
+
...(site_crawl === undefined ? {} : { siteCrawl: site_crawl }),
|
|
35
|
+
...(crawl_url === undefined ? {} : { crawlUrl: crawl_url }),
|
|
36
|
+
...(crawl_mode === undefined ? {} : { crawlMode: crawl_mode }),
|
|
37
|
+
...(crawl_limit === undefined ? {} : { crawlLimit: crawl_limit }),
|
|
38
|
+
...(crawl_max_pages === undefined ? {} : { crawlMaxPages: crawl_max_pages }),
|
|
39
|
+
...(crawl_max_depth === undefined ? {} : { crawlMaxDepth: crawl_max_depth }),
|
|
40
|
+
...(crawl_timeout_ms === undefined ? {} : { crawlTimeoutMs: crawl_timeout_ms }),
|
|
41
|
+
});
|
|
42
|
+
return {
|
|
43
|
+
structuredContent: output,
|
|
44
|
+
content: [{ type: "text", text: await runtime.renderSmartsearch(output) }],
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
server.registerTool("smartcrawl", {
|
|
48
|
+
title: "Smart Crawl",
|
|
49
|
+
description: "Traverse a known site when one page is not enough and you need multiple relevant docs pages, posts, or thread items. Start from a concrete site URL; if you need to discover the site first, use smartsearch, and if you only need one direct URL, use smartfetch. For LinkedIn profile URLs this is best-effort recent public post discovery, not full archive pagination.",
|
|
50
|
+
inputSchema: {
|
|
51
|
+
url: z.string().min(1).describe("Starting site or docs URL to explore. Use this when you need multiple pages from one site, not a single direct URL fetch."),
|
|
52
|
+
query: z.string().optional().describe("Optional topic filter used to rank crawl results"),
|
|
53
|
+
mode: z.enum(["auto", "board", "docs"]).optional().describe("Traversal hint for boards, docs sites, or automatic detection"),
|
|
54
|
+
limit: z.number().int().min(1).max(50).optional().describe("Maximum number of ranked results to return. For LinkedIn profile URLs this acts like a best-effort recent public post count."),
|
|
55
|
+
max_pages: z.number().int().min(1).max(20).optional().describe("Maximum number of pages to visit during exploration"),
|
|
56
|
+
max_depth: z.number().int().min(0).max(3).optional().describe("Maximum recursive depth from the starting URL"),
|
|
57
|
+
include_patterns: z.array(z.string().min(1)).max(20).optional().describe("Optional regex or substring patterns for URLs to keep"),
|
|
58
|
+
exclude_patterns: z.array(z.string().min(1)).max(20).optional().describe("Optional regex or substring patterns for URLs to skip"),
|
|
59
|
+
same_origin_only: z.boolean().optional().describe("Restrict traversal to the starting origin while still surfacing external item links"),
|
|
60
|
+
follow_pagination: z.boolean().optional().describe("Follow next or more-style pagination links during exploration"),
|
|
61
|
+
scroll_steps: z.number().int().min(0).max(12).optional().describe("How many scroll attempts to use for scroll-driven pages"),
|
|
62
|
+
timeout_ms: z.number().int().min(3000).max(120000).optional().describe("Crawl timeout budget per page"),
|
|
63
|
+
format: z.enum(["json", "text", "markdown"]).optional().describe("Text rendering format for the human-readable content"),
|
|
64
|
+
},
|
|
65
|
+
annotations: {
|
|
66
|
+
title: "Smart Crawl",
|
|
67
|
+
readOnlyHint: true,
|
|
68
|
+
destructiveHint: false,
|
|
69
|
+
idempotentHint: true,
|
|
70
|
+
openWorldHint: true,
|
|
71
|
+
},
|
|
72
|
+
}, async ({ url, query, mode, limit, max_pages, max_depth, include_patterns, exclude_patterns, same_origin_only, follow_pagination, scroll_steps, timeout_ms, format }) => {
|
|
73
|
+
const output = await runtime.runSmartcrawl({
|
|
74
|
+
url,
|
|
75
|
+
...(query === undefined ? {} : { query }),
|
|
76
|
+
...(mode === undefined ? {} : { mode }),
|
|
77
|
+
...(limit === undefined ? {} : { limit }),
|
|
78
|
+
...(max_pages === undefined ? {} : { maxPages: max_pages }),
|
|
79
|
+
...(max_depth === undefined ? {} : { maxDepth: max_depth }),
|
|
80
|
+
...(include_patterns === undefined ? {} : { includePatterns: include_patterns }),
|
|
81
|
+
...(exclude_patterns === undefined ? {} : { excludePatterns: exclude_patterns }),
|
|
82
|
+
...(same_origin_only === undefined ? {} : { sameOriginOnly: same_origin_only }),
|
|
83
|
+
...(follow_pagination === undefined ? {} : { followPagination: follow_pagination }),
|
|
84
|
+
...(scroll_steps === undefined ? {} : { scrollSteps: scroll_steps }),
|
|
85
|
+
...(timeout_ms === undefined ? {} : { timeoutMs: timeout_ms }),
|
|
86
|
+
});
|
|
87
|
+
const requestedFormat = format || "json";
|
|
88
|
+
return {
|
|
89
|
+
structuredContent: output,
|
|
90
|
+
content: [{ type: "text", text: requestedFormat === "json" ? JSON.stringify(output, null, 2) : await runtime.renderSmartcrawl(output, requestedFormat) }],
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
server.registerTool("smartdocscrawl", {
|
|
94
|
+
title: "Smart Docs Crawl",
|
|
95
|
+
description: "Mirror a docs-style site into local Markdown files when you want a reusable offline folder instead of a ranked crawl summary.",
|
|
96
|
+
inputSchema: {
|
|
97
|
+
url: z.string().min(1).describe("Starting docs URL to mirror into Markdown. Prefer a docs home or section root, not a one-off article."),
|
|
98
|
+
output_dir: z.string().min(1).describe("Local directory where Markdown files, a README summary, and a crawl manifest should be written."),
|
|
99
|
+
query: z.string().optional().describe("Optional topic filter used to prioritize which docs pages get crawled first"),
|
|
100
|
+
max_pages: z.number().int().min(1).max(200).optional().describe("Maximum number of docs pages to visit while building the local Markdown folder"),
|
|
101
|
+
max_depth: z.number().int().min(0).max(20).optional().describe("Maximum crawl depth from the starting docs page"),
|
|
102
|
+
include_patterns: z.array(z.string().min(1)).max(50).optional().describe("Optional regex or substring patterns for URLs to keep in the docs export"),
|
|
103
|
+
exclude_patterns: z.array(z.string().min(1)).max(50).optional().describe("Optional regex or substring patterns for URLs to skip in the docs export"),
|
|
104
|
+
same_origin_only: z.boolean().optional().describe("Restrict traversal to the starting origin while still exporting only local Markdown files"),
|
|
105
|
+
follow_pagination: z.boolean().optional().describe("Follow next-page style links when the docs site splits sections across pages"),
|
|
106
|
+
scroll_steps: z.number().int().min(0).max(12).optional().describe("How aggressively to scroll rendered docs pages before snapshotting content"),
|
|
107
|
+
timeout_ms: z.number().int().min(3000).max(120000).optional().describe("Per-page timeout budget in milliseconds"),
|
|
108
|
+
},
|
|
109
|
+
annotations: {
|
|
110
|
+
title: "Smart Docs Crawl",
|
|
111
|
+
readOnlyHint: false,
|
|
112
|
+
destructiveHint: true,
|
|
113
|
+
idempotentHint: false,
|
|
114
|
+
openWorldHint: true,
|
|
115
|
+
},
|
|
116
|
+
}, async ({ url, output_dir, query, max_pages, max_depth, include_patterns, exclude_patterns, same_origin_only, follow_pagination, scroll_steps, timeout_ms }) => {
|
|
117
|
+
const output = await runtime.runSmartdocscrawl({
|
|
118
|
+
url,
|
|
119
|
+
outputDir: output_dir,
|
|
120
|
+
...(query === undefined ? {} : { query }),
|
|
121
|
+
...(max_pages === undefined ? {} : { maxPages: max_pages }),
|
|
122
|
+
...(max_depth === undefined ? {} : { maxDepth: max_depth }),
|
|
123
|
+
...(include_patterns === undefined ? {} : { includePatterns: include_patterns }),
|
|
124
|
+
...(exclude_patterns === undefined ? {} : { excludePatterns: exclude_patterns }),
|
|
125
|
+
...(same_origin_only === undefined ? {} : { sameOriginOnly: same_origin_only }),
|
|
126
|
+
...(follow_pagination === undefined ? {} : { followPagination: follow_pagination }),
|
|
127
|
+
...(scroll_steps === undefined ? {} : { scrollSteps: scroll_steps }),
|
|
128
|
+
...(timeout_ms === undefined ? {} : { timeoutMs: timeout_ms }),
|
|
129
|
+
});
|
|
130
|
+
return {
|
|
131
|
+
structuredContent: output,
|
|
132
|
+
content: [{ type: "text", text: await runtime.renderSmartdocscrawl(output) }],
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
server.registerTool("smartfetch", {
|
|
136
|
+
title: "Smart Fetch",
|
|
137
|
+
description: "Fetch and normalize one known URL or shortlink. Use this first for direct user-supplied URLs, browser-rendered pages, social posts, and videos; do not use smartsearch when the user already provided the URL, and use smartcrawl only when you need multiple pages from the same site.",
|
|
138
|
+
inputSchema: {
|
|
139
|
+
url: z.string().min(1).describe("Direct URL or shortlink to fetch. Prefer this tool when the user already supplied a URL."),
|
|
140
|
+
target: z.enum(["auto", "generic", "reddit_post", "x_post", "threads_post", "instagram_post", "telegram_post", "dcinside_post", "youtube_video", "naver_blog", "naver_cafe_post", "tistory_post", "velog_post", "hackernews_post", "linkedin_post"]).optional().describe("Content type hint"),
|
|
141
|
+
timeout_ms: z.number().int().min(3000).max(120000).optional().describe("Fetch timeout in milliseconds"),
|
|
142
|
+
download: z.boolean().optional().describe("Prefer a downloadable asset result when the URL or discovered assets point to a file"),
|
|
143
|
+
force_dynamic: z.boolean().optional().describe("Skip light fetches and go straight to Playwright"),
|
|
144
|
+
strict_schema: z.boolean().optional().describe("Return schema-safe fallback output when normalization breaks"),
|
|
145
|
+
format: z.enum(["json", "text", "markdown"]).optional().describe("Text rendering format for the human-readable content"),
|
|
146
|
+
},
|
|
147
|
+
annotations: {
|
|
148
|
+
title: "Smart Fetch",
|
|
149
|
+
readOnlyHint: true,
|
|
150
|
+
destructiveHint: false,
|
|
151
|
+
idempotentHint: true,
|
|
152
|
+
openWorldHint: true,
|
|
153
|
+
},
|
|
154
|
+
}, async ({ url, target, timeout_ms, download, force_dynamic, strict_schema, format }) => {
|
|
155
|
+
const output = await runtime.runSmartfetch({
|
|
156
|
+
url,
|
|
157
|
+
...(target === undefined ? {} : { target }),
|
|
158
|
+
...(timeout_ms === undefined ? {} : { timeoutMs: timeout_ms }),
|
|
159
|
+
...(download === undefined ? {} : { download }),
|
|
160
|
+
...(force_dynamic === undefined ? {} : { forceDynamic: force_dynamic }),
|
|
161
|
+
...(strict_schema === undefined ? {} : { strictSchema: strict_schema }),
|
|
162
|
+
});
|
|
163
|
+
const requestedFormat = format || "json";
|
|
164
|
+
return {
|
|
165
|
+
structuredContent: output,
|
|
166
|
+
content: [{ type: "text", text: requestedFormat === "json" ? JSON.stringify(output, null, 2) : await runtime.renderSmartfetch(output, requestedFormat) }],
|
|
167
|
+
};
|
|
168
|
+
});
|
|
169
|
+
return server;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "smart-web-mcp",
|
|
3
3
|
"mcpName": "io.github.rich-jojo/smart-web",
|
|
4
|
-
"version": "0.5.
|
|
4
|
+
"version": "0.5.23",
|
|
5
5
|
"packageManager": "npm@10.8.2",
|
|
6
6
|
"description": "Portable MCP server for web search, direct-URL fetch, site crawling, and docs export.",
|
|
7
7
|
"homepage": "https://github.com/rich-jojo/smart-web",
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
"./shared": "./dist/shared.js"
|
|
23
23
|
},
|
|
24
24
|
"bin": {
|
|
25
|
-
"smart-web-mcp": "dist/index.js"
|
|
25
|
+
"smart-web-mcp": "dist/index.js",
|
|
26
|
+
"smart-web-dev": "dist/dev.js"
|
|
26
27
|
},
|
|
27
28
|
"files": [
|
|
28
29
|
"dist",
|
|
@@ -35,8 +36,10 @@
|
|
|
35
36
|
"scripts": {
|
|
36
37
|
"build": "tsc -p tsconfig.json",
|
|
37
38
|
"dev": "tsx src/index.ts",
|
|
39
|
+
"dev:mcp": "node dist/dev.js",
|
|
40
|
+
"dev:watch": "tsc -p tsconfig.json --watch --preserveWatchOutput",
|
|
38
41
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
39
|
-
"test": "node --import tsx --test src/shared.test.ts src/assets.test.ts src/render.test.ts src/providers.test.ts src/smartcrawl.test.ts src/smartdocscrawl.test.ts src/provider-policy.test.ts src/archive-fallback.test.ts src/mcp.test.ts",
|
|
42
|
+
"test": "node --import tsx --test src/shared.test.ts src/assets.test.ts src/dev-runtime.test.ts src/render.test.ts src/providers.test.ts src/smartcrawl.test.ts src/smartdocscrawl.test.ts src/provider-policy.test.ts src/archive-fallback.test.ts src/mcp.test.ts",
|
|
40
43
|
"check:meta": "node scripts/check-metadata.mjs",
|
|
41
44
|
"check": "npm run build && npm run check:meta && npm run test",
|
|
42
45
|
"hooks:install": "node scripts/install-git-hooks.mjs",
|