@datasynx/agentic-ai-cartography 1.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/llms.txt ADDED
@@ -0,0 +1,24 @@
1
+ # @datasynx/agentic-ai-cartography
2
+
3
+ > MCP-first infrastructure & agentic-AI cartography — install once, every AI agent knows your system landscape. Read-only discovery exposed over the Model Context Protocol.
4
+
5
+ Cartography discovers your services, databases, SaaS tools and dependencies
6
+ (read-only, deterministic) and exposes the topology over the Model Context
7
+ Protocol. Install once and any MCP host or agent framework can query it.
8
+
9
+ ## Getting started
10
+
11
+ - [Quickstart](https://datasynx.github.io/agentic-ai-cartography/#quickstart): From zero to an agent that knows your system.
12
+ - [Install into a client](https://datasynx.github.io/agentic-ai-cartography/#install): Write the MCP config for any supported host.
13
+
14
+ ## Reference
15
+
16
+ - [MCP tools & resources](https://datasynx.github.io/agentic-ai-cartography/#tools): Resources, tools and prompts the server exposes.
17
+ - [CLI](https://datasynx.github.io/agentic-ai-cartography/#cli): datasynx-cartography commands and flags.
18
+ - [Supported clients](https://datasynx.github.io/agentic-ai-cartography/#clients): The host install matrix.
19
+ - [Non-MCP frameworks](https://datasynx.github.io/agentic-ai-cartography/#adapters): LangGraph, CrewAI, Vercel AI SDK and more.
20
+
21
+ ## Explanation
22
+
23
+ - [Why MCP-first](https://datasynx.github.io/agentic-ai-cartography/#architecture): The design rationale.
24
+ - [Threat model](https://github.com/datasynx/agentic-ai-cartography/blob/main/docs/explanation/threat-model.md): Attacker model, trust boundaries and mitigations.
package/package.json CHANGED
@@ -1,32 +1,54 @@
1
1
  {
2
2
  "name": "@datasynx/agentic-ai-cartography",
3
- "version": "1.1.1",
4
- "description": "AI-powered infrastructure cartography CLI built on Claude Agent SDK",
3
+ "version": "2.2.0",
4
+ "description": "MCP-first infrastructure & agentic-AI cartography — install once, every AI agent knows your system landscape. Read-only discovery exposed over the Model Context Protocol.",
5
5
  "type": "module",
6
+ "sideEffects": false,
7
+ "mcpName": "io.github.datasynx/cartography",
8
+ "main": "./dist/index.cjs",
9
+ "module": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
6
11
  "bin": {
7
- "datasynx-cartography": "./dist/cli.js"
12
+ "datasynx-cartography": "./dist/cli.js",
13
+ "cartography-mcp": "./dist/mcp-bin.js"
8
14
  },
9
15
  "exports": {
10
16
  ".": {
11
- "import": "./dist/index.js",
12
- "types": "./dist/index.d.ts"
13
- }
17
+ "import": {
18
+ "types": "./dist/index.d.ts",
19
+ "default": "./dist/index.js"
20
+ },
21
+ "require": {
22
+ "types": "./dist/index.d.cts",
23
+ "default": "./dist/index.cjs"
24
+ }
25
+ },
26
+ "./package.json": "./package.json"
14
27
  },
15
28
  "files": [
16
29
  "dist",
17
30
  "scripts",
31
+ "server.json",
18
32
  "README.md",
19
- "LICENSE"
33
+ "AGENTS.md",
34
+ "LICENSE",
35
+ "llms.txt",
36
+ "llms-full.txt"
20
37
  ],
21
38
  "scripts": {
22
39
  "build": "tsup",
40
+ "build:mcpb": "node scripts/build-mcpb.mjs",
23
41
  "dev": "tsx src/cli.ts",
24
42
  "test": "vitest run",
25
43
  "test:watch": "vitest",
26
44
  "test:coverage": "vitest run --coverage",
45
+ "docs:llms": "node scripts/build-llms.mjs",
46
+ "docs:tables": "tsx scripts/gen-docs.ts",
47
+ "docs:build": "npm run docs:tables && npm run docs:llms",
27
48
  "lint": "tsc --noEmit",
28
- "prepublishOnly": "npm run lint && npm run test && npm run build",
29
- "postinstall": "node scripts/postinstall.mjs"
49
+ "typecheck": "tsc --noEmit",
50
+ "release": "semantic-release",
51
+ "prepublishOnly": "npm run lint && npm run test && npm run build"
30
52
  },
31
53
  "engines": {
32
54
  "node": ">=20.0.0"
@@ -35,14 +57,18 @@
35
57
  "infrastructure",
36
58
  "cartography",
37
59
  "discovery",
38
- "sop",
39
- "claude",
60
+ "topology",
40
61
  "ai-agent",
62
+ "agentic-ai",
63
+ "mcp",
41
64
  "devops",
65
+ "platform-engineering",
42
66
  "mermaid",
43
67
  "backstage",
68
+ "cmdb",
44
69
  "network-topology",
45
- "observability"
70
+ "observability",
71
+ "shadow-it"
46
72
  ],
47
73
  "author": {
48
74
  "name": "Datasynx AI",
@@ -50,29 +76,53 @@
50
76
  },
51
77
  "repository": {
52
78
  "type": "git",
53
- "url": "https://github.com/datasynx/agentic-ai-cartography.git"
79
+ "url": "git+https://github.com/datasynx/agentic-ai-cartography.git"
54
80
  },
55
81
  "homepage": "https://github.com/datasynx/agentic-ai-cartography#readme",
56
82
  "bugs": {
57
83
  "url": "https://github.com/datasynx/agentic-ai-cartography/issues"
58
84
  },
85
+ "publishConfig": {
86
+ "access": "public",
87
+ "provenance": true
88
+ },
59
89
  "license": "MIT",
90
+ "overrides": {
91
+ "tmp": "^0.2.7",
92
+ "hono": "^4.12.25"
93
+ },
60
94
  "dependencies": {
61
- "@anthropic-ai/claude-agent-sdk": "^0.2.59",
62
- "@anthropic-ai/sdk": "^0.78.0",
63
- "better-sqlite3": "^12.6.0",
95
+ "@modelcontextprotocol/sdk": "^1.29.0",
96
+ "better-sqlite3": "^12.10.0",
64
97
  "commander": "^14.0.0",
65
- "ora": "^9.3.0",
66
- "picocolors": "^1.1.1",
67
- "zod": "^4.3.6"
98
+ "smol-toml": "^1.6.1",
99
+ "yaml": "^2.9.0",
100
+ "zod": "^4.4.3"
101
+ },
102
+ "optionalDependencies": {
103
+ "@anthropic-ai/claude-agent-sdk": ">=0.2.70 <0.4.0",
104
+ "@anthropic-ai/sdk": "^0.104.0",
105
+ "@huggingface/transformers": "^4.2.0",
106
+ "openai": "^4.104.0",
107
+ "sqlite-vec": "^0.1.9"
68
108
  },
69
109
  "devDependencies": {
110
+ "@anthropic-ai/mcpb": "^2.1.2",
111
+ "@arethetypeswrong/cli": "^0.18.2",
112
+ "ajv": "^8.20.0",
113
+ "@semantic-release/changelog": "^6.0.3",
114
+ "@semantic-release/git": "^10.0.1",
115
+ "@semantic-release/github": "^11.0.1",
116
+ "@semantic-release/npm": "^12.0.1",
70
117
  "@types/better-sqlite3": "^7.6.12",
71
118
  "@types/node": "^22.10.0",
72
- "@vitest/coverage-v8": "^4.0.18",
119
+ "@vitest/coverage-v8": "^4.1.0",
120
+ "license-checker": "^25.0.1",
121
+ "publint": "^0.3.0",
122
+ "semantic-release": "^24.2.0",
73
123
  "tsup": "^8.3.0",
74
124
  "tsx": "^4.19.0",
75
125
  "typescript": "^5.7.2",
76
- "vitest": "^4.0.18"
126
+ "vitest": "^4.1.0"
77
127
  }
78
128
  }
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Generate llms.txt (a curated, LLM-friendly navigation map) and llms-full.txt
4
+ * (the full documentation text in one file) from the docs/ sources, per the
5
+ * llmstxt.org convention. Canonical output lives at the repo root so the files
6
+ * ship in the npm package and are agent-discoverable; `docs:build` also copies
7
+ * them into docs/public so the site serves them at its domain root.
8
+ *
9
+ * Run via `npm run docs:llms`. Kept in lockstep with the docs by a drift test.
10
+ */
11
+
12
+ import { readFileSync, writeFileSync, mkdirSync, copyFileSync } from 'node:fs';
13
+ import { resolve, dirname } from 'node:path';
14
+ import { fileURLToPath } from 'node:url';
15
+
16
+ const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
17
+ const SITE = 'https://datasynx.github.io/agentic-ai-cartography';
18
+
19
+ /** Curated documentation index. Links point to anchors on the single-page site. */
20
+ const SECTIONS = [
21
+ {
22
+ heading: 'Getting started',
23
+ pages: [
24
+ { file: 'docs/tutorials/index.md', url: `${SITE}/#quickstart`, title: 'Quickstart', desc: 'From zero to an agent that knows your system.' },
25
+ { file: 'docs/how-to/install.md', url: `${SITE}/#install`, title: 'Install into a client', desc: 'Write the MCP config for any supported host.' },
26
+ ],
27
+ },
28
+ {
29
+ heading: 'Reference',
30
+ pages: [
31
+ { file: 'docs/reference/mcp.md', url: `${SITE}/#tools`, title: 'MCP tools & resources', desc: 'Resources, tools and prompts the server exposes.' },
32
+ { file: 'docs/reference/cli.md', url: `${SITE}/#cli`, title: 'CLI', desc: 'datasynx-cartography commands and flags.' },
33
+ { file: 'docs/reference/clients.md', url: `${SITE}/#clients`, title: 'Supported clients', desc: 'The host install matrix.' },
34
+ { file: 'docs/adapters.md', url: `${SITE}/#adapters`, title: 'Non-MCP frameworks', desc: 'LangGraph, CrewAI, Vercel AI SDK and more.' },
35
+ ],
36
+ },
37
+ {
38
+ heading: 'Explanation',
39
+ pages: [
40
+ { file: 'docs/explanation/index.md', url: `${SITE}/#architecture`, title: 'Why MCP-first', desc: 'The design rationale.' },
41
+ { file: 'docs/explanation/threat-model.md', url: 'https://github.com/datasynx/agentic-ai-cartography/blob/main/docs/explanation/threat-model.md', title: 'Threat model', desc: 'Attacker model, trust boundaries and mitigations.' },
42
+ ],
43
+ },
44
+ ];
45
+
46
+ const stripFrontmatter = (s) => s.replace(/^---\n[\s\S]*?\n---\n/, '');
47
+
48
+ /** Pure: build both files' contents from the docs sources. Side-effect free. */
49
+ export function generate() {
50
+ const pkg = JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8'));
51
+ const SUMMARY = pkg.description;
52
+
53
+ const llms = [`# ${pkg.name}`, '', `> ${SUMMARY}`, ''];
54
+ llms.push(
55
+ 'Cartography discovers your services, databases, SaaS tools and dependencies',
56
+ '(read-only, deterministic) and exposes the topology over the Model Context',
57
+ 'Protocol. Install once and any MCP host or agent framework can query it.',
58
+ '',
59
+ );
60
+ for (const section of SECTIONS) {
61
+ llms.push(`## ${section.heading}`, '');
62
+ for (const p of section.pages) llms.push(`- [${p.title}](${p.url}): ${p.desc}`);
63
+ llms.push('');
64
+ }
65
+ const llmsTxt = llms.join('\n');
66
+
67
+ const full = [`# ${pkg.name} — full documentation`, '', `> ${SUMMARY}`, ''];
68
+ for (const section of SECTIONS) {
69
+ for (const p of section.pages) {
70
+ full.push('', '---', '', `<!-- source: ${p.file} -->`, '', stripFrontmatter(readFileSync(resolve(root, p.file), 'utf8')).trim(), '');
71
+ }
72
+ }
73
+ const llmsFullTxt = full.join('\n') + '\n';
74
+ return { llmsTxt, llmsFullTxt };
75
+ }
76
+
77
+ /** Write the canonical root files and mirror them into docs/ so Pages serves them at its root. */
78
+ export function write() {
79
+ const { llmsTxt, llmsFullTxt } = generate();
80
+ writeFileSync(resolve(root, 'llms.txt'), llmsTxt);
81
+ writeFileSync(resolve(root, 'llms-full.txt'), llmsFullTxt);
82
+ copyFileSync(resolve(root, 'llms.txt'), resolve(root, 'docs', 'llms.txt'));
83
+ copyFileSync(resolve(root, 'llms-full.txt'), resolve(root, 'docs', 'llms-full.txt'));
84
+ }
85
+
86
+ if (import.meta.url === `file://${process.argv[1]}`) {
87
+ write();
88
+ console.log('✓ Wrote llms.txt and llms-full.txt (+ docs/public mirror)');
89
+ }
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Build the Claude Desktop one-click bundle: keep `mcpb/manifest.json` in sync
4
+ * with package.json's version, then pack `mcpb/` into `dist/cartography.mcpb`
5
+ * using the official @anthropic-ai/mcpb CLI.
6
+ */
7
+
8
+ import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
9
+ import { execFileSync } from 'node:child_process';
10
+ import { dirname, resolve } from 'node:path';
11
+ import { fileURLToPath } from 'node:url';
12
+
13
+ const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
14
+ const pkg = JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8'));
15
+ const manifestPath = resolve(root, 'mcpb', 'manifest.json');
16
+ const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'));
17
+
18
+ // Single source of truth: the npm version drives the manifest version.
19
+ if (manifest.version !== pkg.version) {
20
+ manifest.version = pkg.version;
21
+ writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n');
22
+ console.log(`Synced manifest version → ${pkg.version}`);
23
+ }
24
+
25
+ mkdirSync(resolve(root, 'dist'), { recursive: true });
26
+ const out = resolve(root, 'dist', 'cartography.mcpb');
27
+
28
+ const npx = process.platform === 'win32' ? 'npx.cmd' : 'npx';
29
+ execFileSync(npx, ['mcpb', 'validate', manifestPath], { stdio: 'inherit', cwd: root });
30
+ execFileSync(npx, ['mcpb', 'pack', resolve(root, 'mcpb'), out], { stdio: 'inherit', cwd: root });
31
+ console.log(`\n✓ Wrote ${out}`);
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Regenerate the auto-generated documentation blocks from the single source of
3
+ * truth (the code), so the tool table and client matrix can never drift:
4
+ *
5
+ * - docs/reference/mcp.md → AUTO-GENERATED:tools (live MCP tool list)
6
+ * - docs/reference/clients.md → AUTO-GENERATED:clients (registry matrix)
7
+ * → AUTO-GENERATED:quickstarts (per-host config block)
8
+ * - AGENTS.md → the standard config block for agent context
9
+ *
10
+ * Run via `npm run docs:tables`. Guarded against drift by a test.
11
+ */
12
+
13
+ import { readFileSync, writeFileSync } from 'node:fs';
14
+ import { resolve } from 'node:path';
15
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
16
+ import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js';
17
+ import { createMcpServer } from '../src/mcp/server.js';
18
+ import { CartographyDB } from '../src/db.js';
19
+ import { defaultConfig } from '../src/types.js';
20
+ import { listClients, getClient, planInstall, defaultServerEntry } from '../src/installer/index.js';
21
+ import type { ResolveContext } from '../src/installer/index.js';
22
+
23
+ const root = resolve(import.meta.dirname, '..');
24
+
25
+ function replaceBlock(content: string, name: string, body: string): string {
26
+ const re = new RegExp(`(<!-- AUTO-GENERATED:${name} START[^\\n]*-->\\n)[\\s\\S]*?(<!-- AUTO-GENERATED:${name} END -->)`);
27
+ if (!re.test(content)) throw new Error(`marker ${name} not found`);
28
+ return content.replace(re, `$1${body}\n$2`);
29
+ }
30
+
31
+ /** Live tool list from the running MCP server (single source of truth). */
32
+ async function toolTable(): Promise<string> {
33
+ const db = new CartographyDB(':memory:');
34
+ db.createSession('discover', defaultConfig());
35
+ const server = createMcpServer({ db, discovery: async () => ({ nodes: 0, edges: 0 }) });
36
+ const [ct, st] = InMemoryTransport.createLinkedPair();
37
+ const client = new Client({ name: 'gen-docs', version: '1.0.0' });
38
+ await Promise.all([client.connect(ct), server.connect(st)]);
39
+ const { tools } = await client.listTools();
40
+ await client.close();
41
+ db.close();
42
+ const rows = tools
43
+ .sort((a, b) => a.name.localeCompare(b.name))
44
+ .map((t) => `| \`${t.name}\` | ${t.annotations?.readOnlyHint ? '✅' : '—'} | ${(t.description ?? '').split('\n')[0]} |`);
45
+ return ['| Tool | Read-only | Description |', '| --- | --- | --- |', ...rows].join('\n');
46
+ }
47
+
48
+ function clientMatrix(): string {
49
+ const rows = listClients().map((c) => `| \`${c.id}\` | ${c.label} | ${c.format} | ${c.note ?? ''} |`);
50
+ return ['| id | Host | Format | Notes |', '| --- | --- | --- | --- |', ...rows].join('\n');
51
+ }
52
+
53
+ function quickstarts(): string {
54
+ const ctx: ResolveContext = { scope: 'global', os: 'linux', home: '~', cwd: '.', env: {} };
55
+ const entry = defaultServerEntry();
56
+ const out: string[] = [];
57
+ for (const c of listClients()) {
58
+ const spec = getClient(c.id)!;
59
+ const plan = planInstall(spec, ctx, { entry });
60
+ const lang = plan.format === 'json' ? 'json' : plan.format;
61
+ out.push(`### ${c.label} (\`${c.id}\`)`, '', `\`${plan.path}\``, '', '```' + lang, plan.after.trim(), '```', '');
62
+ }
63
+ return out.join('\n');
64
+ }
65
+
66
+ function agentsMd(): string {
67
+ const entry = defaultServerEntry();
68
+ const block = JSON.stringify({ mcpServers: { cartography: { command: entry.command, args: entry.args } } }, null, 2);
69
+ return `# Working with Cartography
70
+
71
+ This project can use **Cartography** — an MCP server that maps the system landscape
72
+ (services, datastores, SaaS tools, dependencies) read-only.
73
+
74
+ ## Enable it
75
+
76
+ \`\`\`json
77
+ ${block}
78
+ \`\`\`
79
+
80
+ Or run \`datasynx-cartography install --client <id>\` (see \`list-clients\`).
81
+
82
+ ## Use it
83
+
84
+ - Read \`cartography://graph/summary\` first — a low-token overview.
85
+ - Then drill in with \`query_infrastructure\`, \`get_dependencies\`, \`get_node\`.
86
+ - All tools are read-only; run \`run_discovery\` to (re)scan the local system.
87
+
88
+ <!-- Generated by \`npm run docs:tables\`; edit scripts/gen-docs.ts, not this file. -->
89
+ `;
90
+ }
91
+
92
+ export interface GeneratedDocs {
93
+ mcpPath: string;
94
+ mcp: string;
95
+ clientsPath: string;
96
+ clients: string;
97
+ agentsPath: string;
98
+ agents: string;
99
+ }
100
+
101
+ /** Pure: compute the regenerated file contents from the current sources. */
102
+ export async function buildDocs(): Promise<GeneratedDocs> {
103
+ const mcpPath = resolve(root, 'docs/reference/mcp.md');
104
+ const mcp = replaceBlock(readFileSync(mcpPath, 'utf8'), 'tools', await toolTable());
105
+
106
+ const clientsPath = resolve(root, 'docs/reference/clients.md');
107
+ let clients = readFileSync(clientsPath, 'utf8');
108
+ clients = replaceBlock(clients, 'clients', clientMatrix());
109
+ clients = replaceBlock(clients, 'quickstarts', quickstarts());
110
+
111
+ return { mcpPath, mcp, clientsPath, clients, agentsPath: resolve(root, 'AGENTS.md'), agents: agentsMd() };
112
+ }
113
+
114
+ export async function generateDocs(): Promise<void> {
115
+ const d = await buildDocs();
116
+ writeFileSync(d.mcpPath, d.mcp);
117
+ writeFileSync(d.clientsPath, d.clients);
118
+ writeFileSync(d.agentsPath, d.agents);
119
+ }
120
+
121
+ if (import.meta.url === `file://${process.argv[1]}`) {
122
+ generateDocs().then(() => console.log('✓ Regenerated tool table, client matrix, quickstarts, AGENTS.md'));
123
+ }
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env node
2
+ // Validate server.json before it ships:
3
+ // (1) version parity with package.json [hard fail]
4
+ // (2) required-field structure [hard fail]
5
+ // (3) JSON-schema validation against $schema [hard on real violations,
6
+ // warn-and-skip on network/$ref errors so CI never flakes]
7
+ // Authoritative schema validation also runs at publish time via mcp-publisher
8
+ // (.github/workflows/mcp-publish.yml).
9
+
10
+ import { readFileSync } from 'node:fs';
11
+ import { resolve, dirname } from 'node:path';
12
+ import { fileURLToPath } from 'node:url';
13
+
14
+ const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
15
+ const pkg = JSON.parse(readFileSync(resolve(root, 'package.json'), 'utf8'));
16
+ const server = JSON.parse(readFileSync(resolve(root, 'server.json'), 'utf8'));
17
+
18
+ const fail = (m) => { console.error(`::error::${m}`); process.exitCode = 1; };
19
+
20
+ // (1) version parity
21
+ if (server.version !== pkg.version) {
22
+ fail(`server.json version (${server.version}) != package.json version (${pkg.version})`);
23
+ }
24
+
25
+ // (2) required structure
26
+ for (const key of ['$schema', 'name', 'version', 'packages']) {
27
+ if (server[key] === undefined) fail(`server.json missing required field: ${key}`);
28
+ }
29
+ if (Array.isArray(server.packages)) {
30
+ server.packages.forEach((p, i) => {
31
+ for (const k of ['identifier', 'version', 'transport']) {
32
+ if (p[k] === undefined) fail(`server.json packages[${i}] missing: ${k}`);
33
+ }
34
+ });
35
+ } else if (server.packages !== undefined) {
36
+ fail('server.json packages must be an array');
37
+ }
38
+
39
+ // (3) best-effort schema validation
40
+ try {
41
+ const { default: Ajv } = await import('ajv');
42
+ const res = await fetch(server.$schema, { signal: AbortSignal.timeout(10_000) });
43
+ if (!res.ok) throw new Error(`schema fetch ${res.status}`);
44
+ const schema = await res.json();
45
+ const ajv = new Ajv({ strict: false, allErrors: true, validateFormats: false });
46
+ const validate = ajv.compile(schema);
47
+ if (!validate(server)) {
48
+ for (const e of validate.errors ?? []) fail(`schema: ${e.instancePath || '/'} ${e.message}`);
49
+ }
50
+ } catch (err) {
51
+ console.warn(`::warning::Skipped remote schema validation (${err instanceof Error ? err.message : String(err)}); parity + structure checks still enforced.`);
52
+ }
53
+
54
+ if (!process.exitCode) console.log(`server.json OK — version parity + structure (${pkg.version})`);
package/server.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.datasynx/cartography",
4
+ "description": "MCP-first read-only discovery of your infra & SaaS landscape as MCP resources, tools and prompts.",
5
+ "version": "2.2.0",
6
+ "repository": {
7
+ "url": "https://github.com/datasynx/agentic-ai-cartography",
8
+ "source": "github"
9
+ },
10
+ "packages": [
11
+ {
12
+ "registryType": "npm",
13
+ "registryBaseUrl": "https://registry.npmjs.org",
14
+ "identifier": "@datasynx/agentic-ai-cartography",
15
+ "version": "2.2.0",
16
+ "runtimeHint": "npx",
17
+ "transport": { "type": "stdio" },
18
+ "runtimeArguments": [
19
+ { "type": "named", "name": "--package", "value": "@datasynx/agentic-ai-cartography", "isRequired": true },
20
+ { "type": "positional", "value": "cartography-mcp", "isRequired": true }
21
+ ],
22
+ "packageArguments": [
23
+ { "type": "named", "name": "--db", "description": "Path to the SQLite catalog", "isRequired": false },
24
+ { "type": "named", "name": "--session", "description": "Session id to serve, or 'latest'", "isRequired": false }
25
+ ]
26
+ }
27
+ ]
28
+ }
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- cleanupTempFiles,
4
- readFirefoxHistory,
5
- scanAllBookmarks,
6
- scanAllHistory
7
- } from "./chunk-QKNYI3SU.js";
8
- export {
9
- cleanupTempFiles,
10
- readFirefoxHistory,
11
- scanAllBookmarks,
12
- scanAllHistory
13
- };
14
- //# sourceMappingURL=bookmarks-BWNVQGPG.js.map