mcp-advwiki 0.1.3
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/.gitignore +2 -0
- package/README.md +278 -0
- package/binary-install.js +212 -0
- package/binary.js +128 -0
- package/install.js +4 -0
- package/npm-shrinkwrap.json +546 -0
- package/package.json +94 -0
- package/run-mcp-advwiki.js +4 -0
package/.gitignore
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
# AdvWiki — a local wiki with search, made for AIs
|
|
2
|
+
|
|
3
|
+
AdvWiki is an [MCP](https://modelcontextprotocol.io) server that puts a local wiki right on your AI agent's desk. It runs over `stdio` with JSON-RPC 2.0 and was thought out to run inside clients like openclaude, deepseek, codex cli and others...
|
|
4
|
+
|
|
5
|
+
Under the hood, it uses [Tantivy](https://github.com/quickwit-oss/tantivy) for full-text search with BM25 — the same algorithm that powers Elasticsearch and Lucene. Everything runs locally, no external server, no embedding, no third-party APIs.
|
|
6
|
+
|
|
7
|
+
Implementation from Karpathy's gist at https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Why does this exist?
|
|
12
|
+
|
|
13
|
+
### The ephemeral memory problem
|
|
14
|
+
|
|
15
|
+
When you chat with an AI, it operates within a context window. Everything you sent in the last messages is right there... but when the session ends or the context gets full, that stuff vanishes. It doesn't matter how much the AI "learned" about your project in that chat: on the next one, it starts from zero.
|
|
16
|
+
|
|
17
|
+
AdvWiki solves this by keeping knowledge in Markdown files that survive any session. The AI doesn't need to remember... it just looks it up.
|
|
18
|
+
|
|
19
|
+
This is also different from searching in a project's local memory which tends to get huge and outdated. By using this kind of service, the documentation is alive, editable, and the search is fast and relevant.
|
|
20
|
+
|
|
21
|
+
### Microservices and scattered documentation
|
|
22
|
+
|
|
23
|
+
In multi-service architectures, system knowledge gets fragmented. Each service has its own repo, its own docs, its own logs. A new dev on the team or an AI trying to help needs to hunt for info in five different places before being able to answer a simple question.
|
|
24
|
+
|
|
25
|
+
AdvWiki serves as a single point of reference. You just toss documentation pages, processed logs, API specs, and decision notes into the wiki, and the BM25 search finds what matters in milliseconds. For the AI consuming the MCP, this means a question like _"which service handles authentication?"_ can be answered with a search + read, without anyone needing to open five repos.
|
|
26
|
+
|
|
27
|
+
### A second brain for the project
|
|
28
|
+
|
|
29
|
+
Think of AdvWiki as a persistence layer between you and the AI. Everything the AI discovers about the code, every architectural decision you guys discuss, every bug that was hard-diagnosed, you register in the wiki. Next chat, the AI looks it up and picks up right where it left off. It's not short-term memory nor a garbage dump of memory. It's accumulated knowledge.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Getting Started
|
|
34
|
+
|
|
35
|
+
### What you need
|
|
36
|
+
|
|
37
|
+
- Node.js + npm if you want the easiest install path...
|
|
38
|
+
- Rust (edition 2024, stable toolchain) only if you want to build from source.
|
|
39
|
+
- Git only if you want to clone the repository.
|
|
40
|
+
|
|
41
|
+
### Install with npm (recommended)
|
|
42
|
+
|
|
43
|
+
If you're just trying to use AdvWiki in Claude Desktop or another MCP client, the easiest path is installing it globally with npm:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm install -g mcp-advwiki@latest
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
That gives you the `mcp-advwiki` command in your terminal, so you can run it directly:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
mcp-advwiki
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
If you want AdvWiki to use another folder as the project root, pass `--root`:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
mcp-advwiki --root /path/to/project
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
If you omit `--root`, AdvWiki keeps the current behavior and uses the current working directory of the process.
|
|
62
|
+
|
|
63
|
+
### Build from source (optional)
|
|
64
|
+
|
|
65
|
+
If you prefer building everything yourself...
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Clone the repository
|
|
69
|
+
git clone https://github.com/dfalci/mcp-advwiki.git
|
|
70
|
+
cd mcp-advwiki
|
|
71
|
+
|
|
72
|
+
# Build in release mode (optimized binary)
|
|
73
|
+
cargo build --release
|
|
74
|
+
|
|
75
|
+
# The binary will be at target/release/mcp-advwiki
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
After building, you can run it straight with Cargo:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
cargo run
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Or use the compiled binary directly:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
./target/release/mcp-advwiki
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Choosing the project root
|
|
91
|
+
|
|
92
|
+
By default, AdvWiki keeps the current behavior: it uses the **current working directory of the process** as the project root.
|
|
93
|
+
|
|
94
|
+
That selected root is where the server expects and/or creates:
|
|
95
|
+
|
|
96
|
+
- `.advwiki/`
|
|
97
|
+
- `.advwikilog.md`
|
|
98
|
+
- `rawindex.md`
|
|
99
|
+
|
|
100
|
+
If you want the server to initialize the wiki structure from another OS folder, start it with the optional `--root <path>` parameter:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
mcp-advwiki --root /path/to/project
|
|
104
|
+
|
|
105
|
+
# or, if you're running from source with Cargo
|
|
106
|
+
cargo run -- --root /path/to/project
|
|
107
|
+
|
|
108
|
+
# or using the compiled binary
|
|
109
|
+
./target/release/mcp-advwiki --root /path/to/project
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
You can also use the inline form:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
./target/release/mcp-advwiki --root=/path/to/project
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
If you omit the parameter, the behavior remains exactly the same as today.
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## How it works
|
|
123
|
+
|
|
124
|
+
AdvWiki has four main pieces that talk to each other:
|
|
125
|
+
|
|
126
|
+
### The watcher — eyes on the filesystem
|
|
127
|
+
|
|
128
|
+
There's a module (`watcher.rs`) that monitors the wiki directories using the `notify` crate. Every time you create, edit, or remove a `.md` file inside `.advwiki/pages/`, the watcher notices and sends an event through the internal channel.
|
|
129
|
+
|
|
130
|
+
Same thing for _raw sources_ ... raw files you've indexed (logs, CSVs, API JSONs) that live in `.advwiki/sources/`.
|
|
131
|
+
|
|
132
|
+
### The search engine — BM25 on disk
|
|
133
|
+
|
|
134
|
+
The `search.rs` module maintains a Tantivy index in `.advwiki/index/`. Whenever a new page event arrives, the index gets updated. Tantivy tokenizes the text and keeps the search structures ready to go.
|
|
135
|
+
|
|
136
|
+
When the AI asks _"search for 'JWT authentication'"_, AdvWiki isn't doing a grep... it's running a search ranked by statistical relevance. BM25 weighs term frequency, rarity in the corpus, and document size. The result: the most relevant page pops up first.
|
|
137
|
+
|
|
138
|
+
### The MCP server — the bridge to the AI
|
|
139
|
+
|
|
140
|
+
The `mcp_server.rs` module implements the MCP protocol over stdin/stdout. It exposes:
|
|
141
|
+
|
|
142
|
+
- **Resources**: reading pages, lists, logs, metadata. The AI accesses it as if it were a logical filesystem (`wiki://page/home`, `raw://source/abc123`).
|
|
143
|
+
- **Tools**: actions the AI can trigger: search, create page, delete, validate index integrity, download external content.
|
|
144
|
+
|
|
145
|
+
Everything via JSON-RPC 2.0, just like the MCP spec says.
|
|
146
|
+
|
|
147
|
+
### The storage — everything in its right place
|
|
148
|
+
|
|
149
|
+
The `storage.rs` module manages the directory structure in `.advwiki/` under the selected project root:
|
|
150
|
+
|
|
151
|
+
```
|
|
152
|
+
.advwiki/
|
|
153
|
+
pages/ - your Markdown pages ({slug}.md)
|
|
154
|
+
sources/ - indexed raw content
|
|
155
|
+
metadata/ - JSON metadata for each raw source
|
|
156
|
+
index/ - Tantivy index (managed automatically)
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
In that same selected root you'll find `.advwikilog.md` (operational log) and `rawindex.md` (readable index of raw sources).
|
|
160
|
+
|
|
161
|
+
### Fully reactive
|
|
162
|
+
|
|
163
|
+
On startup, AdvWiki rebuilds the index by scanning everything that already exists on disk. After that, it keeps listening for changes. You edit a `.md` in your editor and the AI can already search for the new content in the very next message.
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## Search as a RAG tool
|
|
168
|
+
|
|
169
|
+
RAG (_Retrieval-Augmented Generation_) is the pattern where the AI queries an external knowledge base before answering, instead of relying only on what's in the context window.
|
|
170
|
+
|
|
171
|
+
AdvWiki implements the "R" in RAG: the retrieval step. The `search_advwiki` tool takes a text query and returns the most relevant docs from the index. The AI then uses these docs as context to generate its answer.
|
|
172
|
+
|
|
173
|
+
In practice, the flow goes like:
|
|
174
|
+
|
|
175
|
+
1. You ask: _"what's the authentication flow in the gateway service?"_
|
|
176
|
+
2. The AI decides it needs extra context
|
|
177
|
+
3. Calls `search_advwiki` with the query `gateway authentication flow`
|
|
178
|
+
4. BM25 returns the 5 most relevant pages (with score and snippet)
|
|
179
|
+
5. The AI reads the full pages via `read_resource`
|
|
180
|
+
6. Answers based on real content, not on what it "remembers" or hallucinates
|
|
181
|
+
|
|
182
|
+
This is super handy when the project code is too big to fit in a system prompt or a simple memory. Instead of trying to cram 200 files into the prompt, you document the important parts in the wiki and let the search do the heavy lifting of filtering it all out.
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Skills and the learning process
|
|
187
|
+
|
|
188
|
+
One of the coolest ideas about AdvWiki is using it together with a **Skill** — an instruction file that guides the AI's behavior.
|
|
189
|
+
|
|
190
|
+
Check the skills directory for indicated samples.
|
|
191
|
+
|
|
192
|
+
### How it works
|
|
193
|
+
|
|
194
|
+
A Skill might contain a learning script. Something like:
|
|
195
|
+
|
|
196
|
+
1. Read `wiki://index` to understand what's documented
|
|
197
|
+
2. For each listed service, read the corresponding page
|
|
198
|
+
3. Build a mental map of the architecture
|
|
199
|
+
4. Compare it with `rawindex.md` to cross-reference with indexed source code
|
|
200
|
+
|
|
201
|
+
The AI follows this script on its first interaction with the project. The knowledge it gains gets recorded in the wiki itself (creating summary pages, diagrams, notes), so in the next session the process is incremental — it doesn't have to relearn everything, just look up what's already been registered.
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## Setting up in Claude Desktop
|
|
206
|
+
|
|
207
|
+
If you installed AdvWiki with npm, this is the preferred setup for `claude_desktop_config.json`:
|
|
208
|
+
|
|
209
|
+
```json
|
|
210
|
+
{
|
|
211
|
+
"mcpServers": {
|
|
212
|
+
"advwiki": {
|
|
213
|
+
"command": "mcp-advwiki",
|
|
214
|
+
"args": ["--root", "/path/to/your/project"]
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
If you're running from a locally built binary instead, point `command` to that file path.
|
|
221
|
+
|
|
222
|
+
```json
|
|
223
|
+
{
|
|
224
|
+
"mcpServers": {
|
|
225
|
+
"advwiki": {
|
|
226
|
+
"command": "/path/to/mcp-advwiki/target/release/mcp-advwiki",
|
|
227
|
+
"args": ["--root", "/path/to/your/project"]
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
If you prefer the old behavior, keep `"args": []` and the server will continue using the process working directory as its base folder.
|
|
234
|
+
|
|
235
|
+
Restart openclaude or similar and the server naturally shows up as an available tool.
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## Logical URIs
|
|
240
|
+
|
|
241
|
+
AdvWiki exposes content through a simple URI scheme:
|
|
242
|
+
|
|
243
|
+
| Scheme | URI | Returns |
|
|
244
|
+
|---------|-----|---------|
|
|
245
|
+
| `wiki://` | `wiki://list` | List of all pages (slugs) |
|
|
246
|
+
| `wiki://` | `wiki://page/{slug}` | Full contents of the page |
|
|
247
|
+
| `wiki://` | `wiki://index` | Main index (rawindex) |
|
|
248
|
+
| `wiki://` | `wiki://rawindex` | Readable raw index |
|
|
249
|
+
| `wiki://` | `wiki://log` | Operational log |
|
|
250
|
+
| `raw://` | `raw://sources` | List of available raw sources |
|
|
251
|
+
| `raw://` | `raw://source/{id}` | Raw contents of the raw source |
|
|
252
|
+
| `raw://` | `raw://sourcemetadata/{id}` | JSON metadata |
|
|
253
|
+
|
|
254
|
+
The URIs are accessible both as **resources** (passive reading) and via **tools** like `read_knowledge_uri`.
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## Available tools
|
|
259
|
+
|
|
260
|
+
The AI has access to these MCP tools:
|
|
261
|
+
|
|
262
|
+
- **search_advwiki** - full-text search with BM25. Takes `query` and `limit`.
|
|
263
|
+
- **read_advwiki_page** - reads a page by its slug.
|
|
264
|
+
- **write_advwiki_page** - creates or updates a page.
|
|
265
|
+
- **delete_advwiki_page** - removes a page.
|
|
266
|
+
- **list_advwiki_pages** - lists all slugs.
|
|
267
|
+
- **read_knowledge_uri** - reads any logical URI in the system.
|
|
268
|
+
- **fetch_url_to_rawsource** - downloads external content and indexes it as a raw source.
|
|
269
|
+
- **validate_advwiki_index** - checks consistency between disk and index.
|
|
270
|
+
- **read_advwiki_log** - reads the operational log.
|
|
271
|
+
- **read_raw_source** / **read_raw_source_metadata** - access to raw sources.
|
|
272
|
+
- **read_rawindex** - reads the raw sources index.
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## License
|
|
277
|
+
|
|
278
|
+
MIT.
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
const { createWriteStream, existsSync, mkdirSync, mkdtemp } = require("fs");
|
|
2
|
+
const { join, sep } = require("path");
|
|
3
|
+
const { spawnSync } = require("child_process");
|
|
4
|
+
const { tmpdir } = require("os");
|
|
5
|
+
|
|
6
|
+
const axios = require("axios");
|
|
7
|
+
const rimraf = require("rimraf");
|
|
8
|
+
const tmpDir = tmpdir();
|
|
9
|
+
|
|
10
|
+
const error = (msg) => {
|
|
11
|
+
console.error(msg);
|
|
12
|
+
process.exit(1);
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
class Package {
|
|
16
|
+
constructor(platform, name, url, filename, zipExt, binaries) {
|
|
17
|
+
let errors = [];
|
|
18
|
+
if (typeof url !== "string") {
|
|
19
|
+
errors.push("url must be a string");
|
|
20
|
+
} else {
|
|
21
|
+
try {
|
|
22
|
+
new URL(url);
|
|
23
|
+
} catch (e) {
|
|
24
|
+
errors.push(e);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (name && typeof name !== "string") {
|
|
28
|
+
errors.push("package name must be a string");
|
|
29
|
+
}
|
|
30
|
+
if (!name) {
|
|
31
|
+
errors.push("You must specify the name of your package");
|
|
32
|
+
}
|
|
33
|
+
if (binaries && typeof binaries !== "object") {
|
|
34
|
+
errors.push("binaries must be a string => string map");
|
|
35
|
+
}
|
|
36
|
+
if (!binaries) {
|
|
37
|
+
errors.push("You must specify the binaries in the package");
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (errors.length > 0) {
|
|
41
|
+
let errorMsg =
|
|
42
|
+
"One or more of the parameters you passed to the Binary constructor are invalid:\n";
|
|
43
|
+
errors.forEach((error) => {
|
|
44
|
+
errorMsg += error;
|
|
45
|
+
});
|
|
46
|
+
errorMsg +=
|
|
47
|
+
'\n\nCorrect usage: new Package("my-binary", "https://example.com/binary/download.tar.gz", {"my-binary": "my-binary"})';
|
|
48
|
+
error(errorMsg);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
this.platform = platform;
|
|
52
|
+
this.url = url;
|
|
53
|
+
this.name = name;
|
|
54
|
+
this.filename = filename;
|
|
55
|
+
this.zipExt = zipExt;
|
|
56
|
+
this.installDirectory = join(__dirname, "node_modules", ".bin_real");
|
|
57
|
+
this.binaries = binaries;
|
|
58
|
+
|
|
59
|
+
if (!existsSync(this.installDirectory)) {
|
|
60
|
+
mkdirSync(this.installDirectory, { recursive: true });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
exists() {
|
|
65
|
+
for (const binaryName in this.binaries) {
|
|
66
|
+
const binRelPath = this.binaries[binaryName];
|
|
67
|
+
const binPath = join(this.installDirectory, binRelPath);
|
|
68
|
+
if (!existsSync(binPath)) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
install(fetchOptions, suppressLogs = false) {
|
|
76
|
+
if (this.exists()) {
|
|
77
|
+
if (!suppressLogs) {
|
|
78
|
+
console.error(
|
|
79
|
+
`${this.name} is already installed, skipping installation.`,
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
return Promise.resolve();
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (existsSync(this.installDirectory)) {
|
|
86
|
+
rimraf.sync(this.installDirectory);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
mkdirSync(this.installDirectory, { recursive: true });
|
|
90
|
+
|
|
91
|
+
if (!suppressLogs) {
|
|
92
|
+
console.error(`Downloading release from ${this.url}`);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return axios({ ...fetchOptions, url: this.url, responseType: "stream" })
|
|
96
|
+
.then((res) => {
|
|
97
|
+
return new Promise((resolve, reject) => {
|
|
98
|
+
mkdtemp(`${tmpDir}${sep}`, (err, directory) => {
|
|
99
|
+
let tempFile = join(directory, this.filename);
|
|
100
|
+
const sink = res.data.pipe(createWriteStream(tempFile));
|
|
101
|
+
sink.on("error", (err) => reject(err));
|
|
102
|
+
sink.on("close", () => {
|
|
103
|
+
if (/\.tar\.*/.test(this.zipExt)) {
|
|
104
|
+
const result = spawnSync("tar", [
|
|
105
|
+
"xf",
|
|
106
|
+
tempFile,
|
|
107
|
+
// The tarballs are stored with a leading directory
|
|
108
|
+
// component; we strip one component in the
|
|
109
|
+
// shell installers too.
|
|
110
|
+
"--strip-components",
|
|
111
|
+
"1",
|
|
112
|
+
"-C",
|
|
113
|
+
this.installDirectory,
|
|
114
|
+
]);
|
|
115
|
+
if (result.status == 0) {
|
|
116
|
+
resolve();
|
|
117
|
+
} else if (result.error) {
|
|
118
|
+
reject(result.error);
|
|
119
|
+
} else {
|
|
120
|
+
reject(
|
|
121
|
+
new Error(
|
|
122
|
+
`An error occurred untarring the artifact: stdout: ${result.stdout}; stderr: ${result.stderr}`,
|
|
123
|
+
),
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
} else if (this.zipExt == ".zip") {
|
|
127
|
+
let result;
|
|
128
|
+
if (this.platform.artifactName.includes("windows")) {
|
|
129
|
+
// Windows does not have "unzip" by default on many installations, instead
|
|
130
|
+
// we use Expand-Archive from powershell
|
|
131
|
+
result = spawnSync("powershell.exe", [
|
|
132
|
+
"-NoProfile",
|
|
133
|
+
"-NonInteractive",
|
|
134
|
+
"-Command",
|
|
135
|
+
`& {
|
|
136
|
+
param([string]$LiteralPath, [string]$DestinationPath)
|
|
137
|
+
Expand-Archive -LiteralPath $LiteralPath -DestinationPath $DestinationPath -Force
|
|
138
|
+
}`,
|
|
139
|
+
tempFile,
|
|
140
|
+
this.installDirectory,
|
|
141
|
+
]);
|
|
142
|
+
} else {
|
|
143
|
+
result = spawnSync("unzip", [
|
|
144
|
+
"-q",
|
|
145
|
+
tempFile,
|
|
146
|
+
"-d",
|
|
147
|
+
this.installDirectory,
|
|
148
|
+
]);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (result.status == 0) {
|
|
152
|
+
resolve();
|
|
153
|
+
} else if (result.error) {
|
|
154
|
+
reject(result.error);
|
|
155
|
+
} else {
|
|
156
|
+
reject(
|
|
157
|
+
new Error(
|
|
158
|
+
`An error occurred unzipping the artifact: stdout: ${result.stdout}; stderr: ${result.stderr}`,
|
|
159
|
+
),
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
} else {
|
|
163
|
+
reject(
|
|
164
|
+
new Error(`Unrecognized file extension: ${this.zipExt}`),
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
})
|
|
171
|
+
.then(() => {
|
|
172
|
+
if (!suppressLogs) {
|
|
173
|
+
console.error(`${this.name} has been installed!`);
|
|
174
|
+
}
|
|
175
|
+
})
|
|
176
|
+
.catch((e) => {
|
|
177
|
+
error(`Error fetching release: ${e.message}`);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
run(binaryName, fetchOptions) {
|
|
182
|
+
const promise = !this.exists()
|
|
183
|
+
? this.install(fetchOptions, true)
|
|
184
|
+
: Promise.resolve();
|
|
185
|
+
|
|
186
|
+
promise
|
|
187
|
+
.then(() => {
|
|
188
|
+
const [, , ...args] = process.argv;
|
|
189
|
+
|
|
190
|
+
const options = { cwd: process.cwd(), stdio: "inherit" };
|
|
191
|
+
|
|
192
|
+
const binRelPath = this.binaries[binaryName];
|
|
193
|
+
if (!binRelPath) {
|
|
194
|
+
error(`${binaryName} is not a known binary in ${this.name}`);
|
|
195
|
+
}
|
|
196
|
+
const binPath = join(this.installDirectory, binRelPath);
|
|
197
|
+
const result = spawnSync(binPath, args, options);
|
|
198
|
+
|
|
199
|
+
if (result.error) {
|
|
200
|
+
error(result.error);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
process.exit(result.status);
|
|
204
|
+
})
|
|
205
|
+
.catch((e) => {
|
|
206
|
+
error(e.message);
|
|
207
|
+
process.exit(1);
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
module.exports.Package = Package;
|
package/binary.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
const { Package } = require("./binary-install");
|
|
2
|
+
const os = require("os");
|
|
3
|
+
const cTable = require("console.table");
|
|
4
|
+
const libc = require("detect-libc");
|
|
5
|
+
const { configureProxy } = require("axios-proxy-builder");
|
|
6
|
+
|
|
7
|
+
const error = (msg) => {
|
|
8
|
+
console.error(msg);
|
|
9
|
+
process.exit(1);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const {
|
|
13
|
+
name,
|
|
14
|
+
artifactDownloadUrls,
|
|
15
|
+
supportedPlatforms,
|
|
16
|
+
glibcMinimum,
|
|
17
|
+
} = require("./package.json");
|
|
18
|
+
|
|
19
|
+
// FIXME: implement NPM installer handling of fallback download URLs
|
|
20
|
+
const artifactDownloadUrl = artifactDownloadUrls[0];
|
|
21
|
+
const builderGlibcMajorVersion = glibcMinimum.major;
|
|
22
|
+
const builderGlibcMinorVersion = glibcMinimum.series;
|
|
23
|
+
|
|
24
|
+
const getPlatform = () => {
|
|
25
|
+
const rawOsType = os.type();
|
|
26
|
+
const rawArchitecture = os.arch();
|
|
27
|
+
|
|
28
|
+
// We want to use rust-style target triples as the canonical key
|
|
29
|
+
// for a platform, so translate the "os" library's concepts into rust ones
|
|
30
|
+
let osType = "";
|
|
31
|
+
switch (rawOsType) {
|
|
32
|
+
case "Windows_NT":
|
|
33
|
+
osType = "pc-windows-msvc";
|
|
34
|
+
break;
|
|
35
|
+
case "Darwin":
|
|
36
|
+
osType = "apple-darwin";
|
|
37
|
+
break;
|
|
38
|
+
case "Linux":
|
|
39
|
+
osType = "unknown-linux-gnu";
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
let arch = "";
|
|
44
|
+
switch (rawArchitecture) {
|
|
45
|
+
case "x64":
|
|
46
|
+
arch = "x86_64";
|
|
47
|
+
break;
|
|
48
|
+
case "arm64":
|
|
49
|
+
arch = "aarch64";
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (rawOsType === "Linux") {
|
|
54
|
+
if (libc.familySync() == "musl") {
|
|
55
|
+
osType = "unknown-linux-musl-dynamic";
|
|
56
|
+
} else if (libc.isNonGlibcLinuxSync()) {
|
|
57
|
+
console.warn(
|
|
58
|
+
"Your libc is neither glibc nor musl; trying static musl binary instead",
|
|
59
|
+
);
|
|
60
|
+
osType = "unknown-linux-musl-static";
|
|
61
|
+
} else {
|
|
62
|
+
let libcVersion = libc.versionSync();
|
|
63
|
+
let splitLibcVersion = libcVersion.split(".");
|
|
64
|
+
let libcMajorVersion = splitLibcVersion[0];
|
|
65
|
+
let libcMinorVersion = splitLibcVersion[1];
|
|
66
|
+
if (
|
|
67
|
+
libcMajorVersion != builderGlibcMajorVersion ||
|
|
68
|
+
libcMinorVersion < builderGlibcMinorVersion
|
|
69
|
+
) {
|
|
70
|
+
// We can't run the glibc binaries, but we can run the static musl ones
|
|
71
|
+
// if they exist
|
|
72
|
+
console.warn(
|
|
73
|
+
"Your glibc isn't compatible; trying static musl binary instead",
|
|
74
|
+
);
|
|
75
|
+
osType = "unknown-linux-musl-static";
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Assume the above succeeded and build a target triple to look things up with.
|
|
81
|
+
// If any of it failed, this lookup will fail and we'll handle it like normal.
|
|
82
|
+
let targetTriple = `${arch}-${osType}`;
|
|
83
|
+
let platform = supportedPlatforms[targetTriple];
|
|
84
|
+
|
|
85
|
+
if (!platform) {
|
|
86
|
+
error(
|
|
87
|
+
`Platform with type "${rawOsType}" and architecture "${rawArchitecture}" is not supported by ${name}.\nYour system must be one of the following:\n\n${Object.keys(
|
|
88
|
+
supportedPlatforms,
|
|
89
|
+
).join(",")}`,
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return platform;
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const getPackage = () => {
|
|
97
|
+
const platform = getPlatform();
|
|
98
|
+
const url = `${artifactDownloadUrl}/${platform.artifactName}`;
|
|
99
|
+
let filename = platform.artifactName;
|
|
100
|
+
let ext = platform.zipExt;
|
|
101
|
+
let binary = new Package(platform, name, url, filename, ext, platform.bins);
|
|
102
|
+
|
|
103
|
+
return binary;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const install = (suppressLogs) => {
|
|
107
|
+
if (!artifactDownloadUrl || artifactDownloadUrl.length === 0) {
|
|
108
|
+
console.warn("in demo mode, not installing binaries");
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const package = getPackage();
|
|
112
|
+
const proxy = configureProxy(package.url);
|
|
113
|
+
|
|
114
|
+
return package.install(proxy, suppressLogs);
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const run = (binaryName) => {
|
|
118
|
+
const package = getPackage();
|
|
119
|
+
const proxy = configureProxy(package.url);
|
|
120
|
+
|
|
121
|
+
package.run(binaryName, proxy);
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
module.exports = {
|
|
125
|
+
install,
|
|
126
|
+
run,
|
|
127
|
+
getPackage,
|
|
128
|
+
};
|
package/install.js
ADDED
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lockfileVersion": 3,
|
|
3
|
+
"name": "mcp-advwiki",
|
|
4
|
+
"packages": {
|
|
5
|
+
"": {
|
|
6
|
+
"bin": {
|
|
7
|
+
"mcp-advwiki": "run-mcp-advwiki.js"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"axios": "^1.13.5",
|
|
11
|
+
"axios-proxy-builder": "^0.1.2",
|
|
12
|
+
"console.table": "^0.10.0",
|
|
13
|
+
"detect-libc": "^2.1.2",
|
|
14
|
+
"rimraf": "^6.1.3"
|
|
15
|
+
},
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"prettier": "^3.8.1"
|
|
18
|
+
},
|
|
19
|
+
"engines": {
|
|
20
|
+
"node": ">=14",
|
|
21
|
+
"npm": ">=6"
|
|
22
|
+
},
|
|
23
|
+
"hasInstallScript": true,
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"name": "mcp-advwiki",
|
|
26
|
+
"version": "0.1.3"
|
|
27
|
+
},
|
|
28
|
+
"node_modules/@isaacs/cliui": {
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=18"
|
|
31
|
+
},
|
|
32
|
+
"integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==",
|
|
33
|
+
"license": "BlueOak-1.0.0",
|
|
34
|
+
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz",
|
|
35
|
+
"version": "9.0.0"
|
|
36
|
+
},
|
|
37
|
+
"node_modules/asynckit": {
|
|
38
|
+
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
|
|
39
|
+
"license": "MIT",
|
|
40
|
+
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
|
|
41
|
+
"version": "0.4.0"
|
|
42
|
+
},
|
|
43
|
+
"node_modules/axios": {
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"follow-redirects": "^1.15.11",
|
|
46
|
+
"form-data": "^4.0.5",
|
|
47
|
+
"proxy-from-env": "^1.1.0"
|
|
48
|
+
},
|
|
49
|
+
"integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==",
|
|
50
|
+
"license": "MIT",
|
|
51
|
+
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz",
|
|
52
|
+
"version": "1.13.5"
|
|
53
|
+
},
|
|
54
|
+
"node_modules/axios-proxy-builder": {
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"tunnel": "^0.0.6"
|
|
57
|
+
},
|
|
58
|
+
"integrity": "sha512-6uBVsBZzkB3tCC8iyx59mCjQckhB8+GQrI9Cop8eC7ybIsvs/KtnNgEBfRMSEa7GqK2VBGUzgjNYMdPIfotyPA==",
|
|
59
|
+
"license": "MIT",
|
|
60
|
+
"resolved": "https://registry.npmjs.org/axios-proxy-builder/-/axios-proxy-builder-0.1.2.tgz",
|
|
61
|
+
"version": "0.1.2"
|
|
62
|
+
},
|
|
63
|
+
"node_modules/balanced-match": {
|
|
64
|
+
"dependencies": {
|
|
65
|
+
"jackspeak": "^4.2.3"
|
|
66
|
+
},
|
|
67
|
+
"engines": {
|
|
68
|
+
"node": "20 || >=22"
|
|
69
|
+
},
|
|
70
|
+
"integrity": "sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==",
|
|
71
|
+
"license": "MIT",
|
|
72
|
+
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.2.tgz",
|
|
73
|
+
"version": "4.0.2"
|
|
74
|
+
},
|
|
75
|
+
"node_modules/brace-expansion": {
|
|
76
|
+
"dependencies": {
|
|
77
|
+
"balanced-match": "^4.0.2"
|
|
78
|
+
},
|
|
79
|
+
"engines": {
|
|
80
|
+
"node": "20 || >=22"
|
|
81
|
+
},
|
|
82
|
+
"integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==",
|
|
83
|
+
"license": "MIT",
|
|
84
|
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz",
|
|
85
|
+
"version": "5.0.2"
|
|
86
|
+
},
|
|
87
|
+
"node_modules/call-bind-apply-helpers": {
|
|
88
|
+
"dependencies": {
|
|
89
|
+
"es-errors": "^1.3.0",
|
|
90
|
+
"function-bind": "^1.1.2"
|
|
91
|
+
},
|
|
92
|
+
"engines": {
|
|
93
|
+
"node": ">= 0.4"
|
|
94
|
+
},
|
|
95
|
+
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
|
|
96
|
+
"license": "MIT",
|
|
97
|
+
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
|
|
98
|
+
"version": "1.0.2"
|
|
99
|
+
},
|
|
100
|
+
"node_modules/clone": {
|
|
101
|
+
"engines": {
|
|
102
|
+
"node": ">=0.8"
|
|
103
|
+
},
|
|
104
|
+
"integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
|
|
105
|
+
"license": "MIT",
|
|
106
|
+
"optional": true,
|
|
107
|
+
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
|
|
108
|
+
"version": "1.0.4"
|
|
109
|
+
},
|
|
110
|
+
"node_modules/combined-stream": {
|
|
111
|
+
"dependencies": {
|
|
112
|
+
"delayed-stream": "~1.0.0"
|
|
113
|
+
},
|
|
114
|
+
"engines": {
|
|
115
|
+
"node": ">= 0.8"
|
|
116
|
+
},
|
|
117
|
+
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
|
118
|
+
"license": "MIT",
|
|
119
|
+
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
|
120
|
+
"version": "1.0.8"
|
|
121
|
+
},
|
|
122
|
+
"node_modules/console.table": {
|
|
123
|
+
"dependencies": {
|
|
124
|
+
"easy-table": "1.1.0"
|
|
125
|
+
},
|
|
126
|
+
"engines": {
|
|
127
|
+
"node": "> 0.10"
|
|
128
|
+
},
|
|
129
|
+
"integrity": "sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g==",
|
|
130
|
+
"license": "MIT",
|
|
131
|
+
"resolved": "https://registry.npmjs.org/console.table/-/console.table-0.10.0.tgz",
|
|
132
|
+
"version": "0.10.0"
|
|
133
|
+
},
|
|
134
|
+
"node_modules/defaults": {
|
|
135
|
+
"dependencies": {
|
|
136
|
+
"clone": "^1.0.2"
|
|
137
|
+
},
|
|
138
|
+
"funding": {
|
|
139
|
+
"url": "https://github.com/sponsors/sindresorhus"
|
|
140
|
+
},
|
|
141
|
+
"integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
|
|
142
|
+
"license": "MIT",
|
|
143
|
+
"optional": true,
|
|
144
|
+
"resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
|
|
145
|
+
"version": "1.0.4"
|
|
146
|
+
},
|
|
147
|
+
"node_modules/delayed-stream": {
|
|
148
|
+
"engines": {
|
|
149
|
+
"node": ">=0.4.0"
|
|
150
|
+
},
|
|
151
|
+
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
|
152
|
+
"license": "MIT",
|
|
153
|
+
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
|
154
|
+
"version": "1.0.0"
|
|
155
|
+
},
|
|
156
|
+
"node_modules/detect-libc": {
|
|
157
|
+
"engines": {
|
|
158
|
+
"node": ">=8"
|
|
159
|
+
},
|
|
160
|
+
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
|
|
161
|
+
"license": "Apache-2.0",
|
|
162
|
+
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
|
|
163
|
+
"version": "2.1.2"
|
|
164
|
+
},
|
|
165
|
+
"node_modules/dunder-proto": {
|
|
166
|
+
"dependencies": {
|
|
167
|
+
"call-bind-apply-helpers": "^1.0.1",
|
|
168
|
+
"es-errors": "^1.3.0",
|
|
169
|
+
"gopd": "^1.2.0"
|
|
170
|
+
},
|
|
171
|
+
"engines": {
|
|
172
|
+
"node": ">= 0.4"
|
|
173
|
+
},
|
|
174
|
+
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
|
175
|
+
"license": "MIT",
|
|
176
|
+
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
|
177
|
+
"version": "1.0.1"
|
|
178
|
+
},
|
|
179
|
+
"node_modules/easy-table": {
|
|
180
|
+
"integrity": "sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==",
|
|
181
|
+
"license": "MIT",
|
|
182
|
+
"optionalDependencies": {
|
|
183
|
+
"wcwidth": ">=1.0.1"
|
|
184
|
+
},
|
|
185
|
+
"resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz",
|
|
186
|
+
"version": "1.1.0"
|
|
187
|
+
},
|
|
188
|
+
"node_modules/es-define-property": {
|
|
189
|
+
"engines": {
|
|
190
|
+
"node": ">= 0.4"
|
|
191
|
+
},
|
|
192
|
+
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
|
193
|
+
"license": "MIT",
|
|
194
|
+
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
|
195
|
+
"version": "1.0.1"
|
|
196
|
+
},
|
|
197
|
+
"node_modules/es-errors": {
|
|
198
|
+
"engines": {
|
|
199
|
+
"node": ">= 0.4"
|
|
200
|
+
},
|
|
201
|
+
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
|
|
202
|
+
"license": "MIT",
|
|
203
|
+
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
|
|
204
|
+
"version": "1.3.0"
|
|
205
|
+
},
|
|
206
|
+
"node_modules/es-object-atoms": {
|
|
207
|
+
"dependencies": {
|
|
208
|
+
"es-errors": "^1.3.0"
|
|
209
|
+
},
|
|
210
|
+
"engines": {
|
|
211
|
+
"node": ">= 0.4"
|
|
212
|
+
},
|
|
213
|
+
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
|
|
214
|
+
"license": "MIT",
|
|
215
|
+
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
|
|
216
|
+
"version": "1.1.1"
|
|
217
|
+
},
|
|
218
|
+
"node_modules/es-set-tostringtag": {
|
|
219
|
+
"dependencies": {
|
|
220
|
+
"es-errors": "^1.3.0",
|
|
221
|
+
"get-intrinsic": "^1.2.6",
|
|
222
|
+
"has-tostringtag": "^1.0.2",
|
|
223
|
+
"hasown": "^2.0.2"
|
|
224
|
+
},
|
|
225
|
+
"engines": {
|
|
226
|
+
"node": ">= 0.4"
|
|
227
|
+
},
|
|
228
|
+
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
|
|
229
|
+
"license": "MIT",
|
|
230
|
+
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
|
|
231
|
+
"version": "2.1.0"
|
|
232
|
+
},
|
|
233
|
+
"node_modules/follow-redirects": {
|
|
234
|
+
"engines": {
|
|
235
|
+
"node": ">=4.0"
|
|
236
|
+
},
|
|
237
|
+
"funding": [
|
|
238
|
+
{
|
|
239
|
+
"type": "individual",
|
|
240
|
+
"url": "https://github.com/sponsors/RubenVerborgh"
|
|
241
|
+
}
|
|
242
|
+
],
|
|
243
|
+
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
|
|
244
|
+
"license": "MIT",
|
|
245
|
+
"peerDependenciesMeta": {
|
|
246
|
+
"debug": {
|
|
247
|
+
"optional": true
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
|
|
251
|
+
"version": "1.15.11"
|
|
252
|
+
},
|
|
253
|
+
"node_modules/form-data": {
|
|
254
|
+
"dependencies": {
|
|
255
|
+
"asynckit": "^0.4.0",
|
|
256
|
+
"combined-stream": "^1.0.8",
|
|
257
|
+
"es-set-tostringtag": "^2.1.0",
|
|
258
|
+
"hasown": "^2.0.2",
|
|
259
|
+
"mime-types": "^2.1.12"
|
|
260
|
+
},
|
|
261
|
+
"engines": {
|
|
262
|
+
"node": ">= 6"
|
|
263
|
+
},
|
|
264
|
+
"integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
|
|
265
|
+
"license": "MIT",
|
|
266
|
+
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz",
|
|
267
|
+
"version": "4.0.5"
|
|
268
|
+
},
|
|
269
|
+
"node_modules/function-bind": {
|
|
270
|
+
"funding": {
|
|
271
|
+
"url": "https://github.com/sponsors/ljharb"
|
|
272
|
+
},
|
|
273
|
+
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
|
274
|
+
"license": "MIT",
|
|
275
|
+
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
|
276
|
+
"version": "1.1.2"
|
|
277
|
+
},
|
|
278
|
+
"node_modules/get-intrinsic": {
|
|
279
|
+
"dependencies": {
|
|
280
|
+
"call-bind-apply-helpers": "^1.0.2",
|
|
281
|
+
"es-define-property": "^1.0.1",
|
|
282
|
+
"es-errors": "^1.3.0",
|
|
283
|
+
"es-object-atoms": "^1.1.1",
|
|
284
|
+
"function-bind": "^1.1.2",
|
|
285
|
+
"get-proto": "^1.0.1",
|
|
286
|
+
"gopd": "^1.2.0",
|
|
287
|
+
"has-symbols": "^1.1.0",
|
|
288
|
+
"hasown": "^2.0.2",
|
|
289
|
+
"math-intrinsics": "^1.1.0"
|
|
290
|
+
},
|
|
291
|
+
"engines": {
|
|
292
|
+
"node": ">= 0.4"
|
|
293
|
+
},
|
|
294
|
+
"funding": {
|
|
295
|
+
"url": "https://github.com/sponsors/ljharb"
|
|
296
|
+
},
|
|
297
|
+
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
|
|
298
|
+
"license": "MIT",
|
|
299
|
+
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
|
300
|
+
"version": "1.3.0"
|
|
301
|
+
},
|
|
302
|
+
"node_modules/get-proto": {
|
|
303
|
+
"dependencies": {
|
|
304
|
+
"dunder-proto": "^1.0.1",
|
|
305
|
+
"es-object-atoms": "^1.0.0"
|
|
306
|
+
},
|
|
307
|
+
"engines": {
|
|
308
|
+
"node": ">= 0.4"
|
|
309
|
+
},
|
|
310
|
+
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
|
311
|
+
"license": "MIT",
|
|
312
|
+
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
|
|
313
|
+
"version": "1.0.1"
|
|
314
|
+
},
|
|
315
|
+
"node_modules/glob": {
|
|
316
|
+
"dependencies": {
|
|
317
|
+
"minimatch": "^10.2.0",
|
|
318
|
+
"minipass": "^7.1.2",
|
|
319
|
+
"path-scurry": "^2.0.0"
|
|
320
|
+
},
|
|
321
|
+
"engines": {
|
|
322
|
+
"node": "20 || >=22"
|
|
323
|
+
},
|
|
324
|
+
"funding": {
|
|
325
|
+
"url": "https://github.com/sponsors/isaacs"
|
|
326
|
+
},
|
|
327
|
+
"integrity": "sha512-/g3B0mC+4x724v1TgtBlBtt2hPi/EWptsIAmXUx9Z2rvBYleQcsrmaOzd5LyL50jf/Soi83ZDJmw2+XqvH/EeA==",
|
|
328
|
+
"license": "BlueOak-1.0.0",
|
|
329
|
+
"resolved": "https://registry.npmjs.org/glob/-/glob-13.0.3.tgz",
|
|
330
|
+
"version": "13.0.3"
|
|
331
|
+
},
|
|
332
|
+
"node_modules/gopd": {
|
|
333
|
+
"engines": {
|
|
334
|
+
"node": ">= 0.4"
|
|
335
|
+
},
|
|
336
|
+
"funding": {
|
|
337
|
+
"url": "https://github.com/sponsors/ljharb"
|
|
338
|
+
},
|
|
339
|
+
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
|
340
|
+
"license": "MIT",
|
|
341
|
+
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
|
342
|
+
"version": "1.2.0"
|
|
343
|
+
},
|
|
344
|
+
"node_modules/has-symbols": {
|
|
345
|
+
"engines": {
|
|
346
|
+
"node": ">= 0.4"
|
|
347
|
+
},
|
|
348
|
+
"funding": {
|
|
349
|
+
"url": "https://github.com/sponsors/ljharb"
|
|
350
|
+
},
|
|
351
|
+
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
|
352
|
+
"license": "MIT",
|
|
353
|
+
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
|
354
|
+
"version": "1.1.0"
|
|
355
|
+
},
|
|
356
|
+
"node_modules/has-tostringtag": {
|
|
357
|
+
"dependencies": {
|
|
358
|
+
"has-symbols": "^1.0.3"
|
|
359
|
+
},
|
|
360
|
+
"engines": {
|
|
361
|
+
"node": ">= 0.4"
|
|
362
|
+
},
|
|
363
|
+
"funding": {
|
|
364
|
+
"url": "https://github.com/sponsors/ljharb"
|
|
365
|
+
},
|
|
366
|
+
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
|
|
367
|
+
"license": "MIT",
|
|
368
|
+
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
|
|
369
|
+
"version": "1.0.2"
|
|
370
|
+
},
|
|
371
|
+
"node_modules/hasown": {
|
|
372
|
+
"dependencies": {
|
|
373
|
+
"function-bind": "^1.1.2"
|
|
374
|
+
},
|
|
375
|
+
"engines": {
|
|
376
|
+
"node": ">= 0.4"
|
|
377
|
+
},
|
|
378
|
+
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
|
379
|
+
"license": "MIT",
|
|
380
|
+
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
|
381
|
+
"version": "2.0.2"
|
|
382
|
+
},
|
|
383
|
+
"node_modules/jackspeak": {
|
|
384
|
+
"dependencies": {
|
|
385
|
+
"@isaacs/cliui": "^9.0.0"
|
|
386
|
+
},
|
|
387
|
+
"engines": {
|
|
388
|
+
"node": "20 || >=22"
|
|
389
|
+
},
|
|
390
|
+
"funding": {
|
|
391
|
+
"url": "https://github.com/sponsors/isaacs"
|
|
392
|
+
},
|
|
393
|
+
"integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==",
|
|
394
|
+
"license": "BlueOak-1.0.0",
|
|
395
|
+
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz",
|
|
396
|
+
"version": "4.2.3"
|
|
397
|
+
},
|
|
398
|
+
"node_modules/lru-cache": {
|
|
399
|
+
"engines": {
|
|
400
|
+
"node": "20 || >=22"
|
|
401
|
+
},
|
|
402
|
+
"integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==",
|
|
403
|
+
"license": "BlueOak-1.0.0",
|
|
404
|
+
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz",
|
|
405
|
+
"version": "11.2.6"
|
|
406
|
+
},
|
|
407
|
+
"node_modules/math-intrinsics": {
|
|
408
|
+
"engines": {
|
|
409
|
+
"node": ">= 0.4"
|
|
410
|
+
},
|
|
411
|
+
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
|
412
|
+
"license": "MIT",
|
|
413
|
+
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
|
414
|
+
"version": "1.1.0"
|
|
415
|
+
},
|
|
416
|
+
"node_modules/mime-db": {
|
|
417
|
+
"engines": {
|
|
418
|
+
"node": ">= 0.6"
|
|
419
|
+
},
|
|
420
|
+
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
|
421
|
+
"license": "MIT",
|
|
422
|
+
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
|
423
|
+
"version": "1.52.0"
|
|
424
|
+
},
|
|
425
|
+
"node_modules/mime-types": {
|
|
426
|
+
"dependencies": {
|
|
427
|
+
"mime-db": "1.52.0"
|
|
428
|
+
},
|
|
429
|
+
"engines": {
|
|
430
|
+
"node": ">= 0.6"
|
|
431
|
+
},
|
|
432
|
+
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
|
433
|
+
"license": "MIT",
|
|
434
|
+
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
|
435
|
+
"version": "2.1.35"
|
|
436
|
+
},
|
|
437
|
+
"node_modules/minimatch": {
|
|
438
|
+
"dependencies": {
|
|
439
|
+
"brace-expansion": "^5.0.2"
|
|
440
|
+
},
|
|
441
|
+
"engines": {
|
|
442
|
+
"node": "20 || >=22"
|
|
443
|
+
},
|
|
444
|
+
"funding": {
|
|
445
|
+
"url": "https://github.com/sponsors/isaacs"
|
|
446
|
+
},
|
|
447
|
+
"integrity": "sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w==",
|
|
448
|
+
"license": "BlueOak-1.0.0",
|
|
449
|
+
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.0.tgz",
|
|
450
|
+
"version": "10.2.0"
|
|
451
|
+
},
|
|
452
|
+
"node_modules/minipass": {
|
|
453
|
+
"engines": {
|
|
454
|
+
"node": ">=16 || 14 >=14.17"
|
|
455
|
+
},
|
|
456
|
+
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
|
|
457
|
+
"license": "ISC",
|
|
458
|
+
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
|
|
459
|
+
"version": "7.1.2"
|
|
460
|
+
},
|
|
461
|
+
"node_modules/package-json-from-dist": {
|
|
462
|
+
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
|
|
463
|
+
"license": "BlueOak-1.0.0",
|
|
464
|
+
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
|
|
465
|
+
"version": "1.0.1"
|
|
466
|
+
},
|
|
467
|
+
"node_modules/path-scurry": {
|
|
468
|
+
"dependencies": {
|
|
469
|
+
"lru-cache": "^11.0.0",
|
|
470
|
+
"minipass": "^7.1.2"
|
|
471
|
+
},
|
|
472
|
+
"engines": {
|
|
473
|
+
"node": "20 || >=22"
|
|
474
|
+
},
|
|
475
|
+
"funding": {
|
|
476
|
+
"url": "https://github.com/sponsors/isaacs"
|
|
477
|
+
},
|
|
478
|
+
"integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==",
|
|
479
|
+
"license": "BlueOak-1.0.0",
|
|
480
|
+
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz",
|
|
481
|
+
"version": "2.0.1"
|
|
482
|
+
},
|
|
483
|
+
"node_modules/prettier": {
|
|
484
|
+
"bin": {
|
|
485
|
+
"prettier": "bin/prettier.cjs"
|
|
486
|
+
},
|
|
487
|
+
"dev": true,
|
|
488
|
+
"engines": {
|
|
489
|
+
"node": ">=14"
|
|
490
|
+
},
|
|
491
|
+
"funding": {
|
|
492
|
+
"url": "https://github.com/prettier/prettier?sponsor=1"
|
|
493
|
+
},
|
|
494
|
+
"integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==",
|
|
495
|
+
"license": "MIT",
|
|
496
|
+
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz",
|
|
497
|
+
"version": "3.8.1"
|
|
498
|
+
},
|
|
499
|
+
"node_modules/proxy-from-env": {
|
|
500
|
+
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
|
|
501
|
+
"license": "MIT",
|
|
502
|
+
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
|
503
|
+
"version": "1.1.0"
|
|
504
|
+
},
|
|
505
|
+
"node_modules/rimraf": {
|
|
506
|
+
"bin": {
|
|
507
|
+
"rimraf": "dist/esm/bin.mjs"
|
|
508
|
+
},
|
|
509
|
+
"dependencies": {
|
|
510
|
+
"glob": "^13.0.3",
|
|
511
|
+
"package-json-from-dist": "^1.0.1"
|
|
512
|
+
},
|
|
513
|
+
"engines": {
|
|
514
|
+
"node": "20 || >=22"
|
|
515
|
+
},
|
|
516
|
+
"funding": {
|
|
517
|
+
"url": "https://github.com/sponsors/isaacs"
|
|
518
|
+
},
|
|
519
|
+
"integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==",
|
|
520
|
+
"license": "BlueOak-1.0.0",
|
|
521
|
+
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz",
|
|
522
|
+
"version": "6.1.3"
|
|
523
|
+
},
|
|
524
|
+
"node_modules/tunnel": {
|
|
525
|
+
"engines": {
|
|
526
|
+
"node": ">=0.6.11 <=0.7.0 || >=0.7.3"
|
|
527
|
+
},
|
|
528
|
+
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
|
|
529
|
+
"license": "MIT",
|
|
530
|
+
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
|
|
531
|
+
"version": "0.0.6"
|
|
532
|
+
},
|
|
533
|
+
"node_modules/wcwidth": {
|
|
534
|
+
"dependencies": {
|
|
535
|
+
"defaults": "^1.0.3"
|
|
536
|
+
},
|
|
537
|
+
"integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
|
|
538
|
+
"license": "MIT",
|
|
539
|
+
"optional": true,
|
|
540
|
+
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
|
|
541
|
+
"version": "1.0.1"
|
|
542
|
+
}
|
|
543
|
+
},
|
|
544
|
+
"requires": true,
|
|
545
|
+
"version": "0.1.3"
|
|
546
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"artifactDownloadUrls": [
|
|
3
|
+
"https://github.com/dfalci/mcp-advwiki/releases/download/v0.1.3"
|
|
4
|
+
],
|
|
5
|
+
"author": "Daniel Falci <danielfalci@gmail.com>",
|
|
6
|
+
"bin": {
|
|
7
|
+
"mcp-advwiki": "run-mcp-advwiki.js"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"axios": "^1.13.5",
|
|
11
|
+
"axios-proxy-builder": "^0.1.2",
|
|
12
|
+
"console.table": "^0.10.0",
|
|
13
|
+
"detect-libc": "^2.1.2",
|
|
14
|
+
"rimraf": "^6.1.3"
|
|
15
|
+
},
|
|
16
|
+
"description": "A local wiki with BM25 search, made for AIs and MCP clients. Good for microservice architecture documentation and knowledge bases.",
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"prettier": "^3.8.1"
|
|
19
|
+
},
|
|
20
|
+
"engines": {
|
|
21
|
+
"node": ">=14",
|
|
22
|
+
"npm": ">=6"
|
|
23
|
+
},
|
|
24
|
+
"glibcMinimum": {
|
|
25
|
+
"major": 2,
|
|
26
|
+
"series": 35
|
|
27
|
+
},
|
|
28
|
+
"homepage": "https://github.com/dfalci/mcp-advwiki",
|
|
29
|
+
"license": "MIT",
|
|
30
|
+
"name": "mcp-advwiki",
|
|
31
|
+
"preferUnplugged": true,
|
|
32
|
+
"repository": "https://github.com/dfalci/mcp-advwiki",
|
|
33
|
+
"scripts": {
|
|
34
|
+
"fmt": "prettier --write **/*.js",
|
|
35
|
+
"fmt:check": "prettier --check **/*.js",
|
|
36
|
+
"postinstall": "node ./install.js"
|
|
37
|
+
},
|
|
38
|
+
"supportedPlatforms": {
|
|
39
|
+
"aarch64-apple-darwin": {
|
|
40
|
+
"artifactName": "mcp-advwiki-aarch64-apple-darwin.tar.xz",
|
|
41
|
+
"bins": {
|
|
42
|
+
"mcp-advwiki": "mcp-advwiki"
|
|
43
|
+
},
|
|
44
|
+
"zipExt": ".tar.xz"
|
|
45
|
+
},
|
|
46
|
+
"aarch64-pc-windows-msvc": {
|
|
47
|
+
"artifactName": "mcp-advwiki-x86_64-pc-windows-msvc.zip",
|
|
48
|
+
"bins": {
|
|
49
|
+
"mcp-advwiki": "mcp-advwiki.exe"
|
|
50
|
+
},
|
|
51
|
+
"zipExt": ".zip"
|
|
52
|
+
},
|
|
53
|
+
"aarch64-unknown-linux-gnu": {
|
|
54
|
+
"artifactName": "mcp-advwiki-aarch64-unknown-linux-gnu.tar.xz",
|
|
55
|
+
"bins": {
|
|
56
|
+
"mcp-advwiki": "mcp-advwiki"
|
|
57
|
+
},
|
|
58
|
+
"zipExt": ".tar.xz"
|
|
59
|
+
},
|
|
60
|
+
"x86_64-apple-darwin": {
|
|
61
|
+
"artifactName": "mcp-advwiki-x86_64-apple-darwin.tar.xz",
|
|
62
|
+
"bins": {
|
|
63
|
+
"mcp-advwiki": "mcp-advwiki"
|
|
64
|
+
},
|
|
65
|
+
"zipExt": ".tar.xz"
|
|
66
|
+
},
|
|
67
|
+
"x86_64-pc-windows-gnu": {
|
|
68
|
+
"artifactName": "mcp-advwiki-x86_64-pc-windows-msvc.zip",
|
|
69
|
+
"bins": {
|
|
70
|
+
"mcp-advwiki": "mcp-advwiki.exe"
|
|
71
|
+
},
|
|
72
|
+
"zipExt": ".zip"
|
|
73
|
+
},
|
|
74
|
+
"x86_64-pc-windows-msvc": {
|
|
75
|
+
"artifactName": "mcp-advwiki-x86_64-pc-windows-msvc.zip",
|
|
76
|
+
"bins": {
|
|
77
|
+
"mcp-advwiki": "mcp-advwiki.exe"
|
|
78
|
+
},
|
|
79
|
+
"zipExt": ".zip"
|
|
80
|
+
},
|
|
81
|
+
"x86_64-unknown-linux-gnu": {
|
|
82
|
+
"artifactName": "mcp-advwiki-x86_64-unknown-linux-gnu.tar.xz",
|
|
83
|
+
"bins": {
|
|
84
|
+
"mcp-advwiki": "mcp-advwiki"
|
|
85
|
+
},
|
|
86
|
+
"zipExt": ".tar.xz"
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"version": "0.1.3",
|
|
90
|
+
"volta": {
|
|
91
|
+
"node": "18.14.1",
|
|
92
|
+
"npm": "9.5.0"
|
|
93
|
+
}
|
|
94
|
+
}
|