🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

@systemdox/mcp-server

Package Overview
Dependencies
Maintainers
1
Versions
22
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@systemdox/mcp-server - npm Package Compare versions

Comparing version
0.1.29
to
0.1.30
+21
-21
dist/http.js

@@ -369,3 +369,3 @@ #!/usr/bin/env node

inputSchema: {
spec_id: z2.string().optional().describe("Specific spec ID to retrieve with full content"),
draft_id: z2.string().optional().describe("Specific spec ID to retrieve with full content"),
status: z2.enum(["draft", "ready", "archived"]).optional().describe("Filter by status"),

@@ -375,6 +375,6 @@ search: z2.string().optional().describe("Keyword search across spec names")

},
async ({ spec_id, status, search }) => {
if (spec_id) {
async ({ draft_id, status, search }) => {
if (draft_id) {
const spec = await apiClient.get(
`/v1/specs/${spec_id}`
`/v1/specs/${draft_id}`
);

@@ -428,3 +428,3 @@ const sections = [`# ${spec.name}

const text = filtered.map(
(s) => `- **${s.name}** (${s.specId}) \u2014 ${s.status}, ${s.requirementCount} requirements` + (s.repoFullName ? `, repo: ${s.repoFullName}` : "")
(s) => `- **${s.name}** (${s.draftId}) \u2014 ${s.status}, ${s.requirementCount} requirements` + (s.repoFullName ? `, repo: ${s.repoFullName}` : "")
).join("\n");

@@ -1070,3 +1070,3 @@ return {

return `### ${s.name}
\`spec_id: ${s.specId}\` \xB7 ${s.status} \xB7 ${s.requirementCount} requirements`;
\`draft_id: ${s.draftId}\` \xB7 ${s.status} \xB7 ${s.requirementCount} requirements`;
}

@@ -1103,5 +1103,5 @@ function formatDocHeadline(d) {

}
async function fetchSpecBody(api, specId) {
async function fetchSpecBody(api, draftId) {
const spec = await api.get(
`/v1/specs/${encodeURIComponent(specId)}`
`/v1/specs/${encodeURIComponent(draftId)}`
);

@@ -1222,12 +1222,12 @@ const parts = [];

...specs.filter((s) => s.status !== "archived").map((s) => {
refs.set(key("spec", s.specId), {
refs.set(key("spec", s.draftId), {
type: "spec",
id: s.specId,
id: s.draftId,
title: s.name,
listLine: `- **${s.name}** \u2014 \`spec_id: ${s.specId}\` (${s.status}, ${s.requirementCount} requirements)`,
fetchHint: `get_specs(spec_id="${s.specId}")`
listLine: `- **${s.name}** \u2014 \`draft_id: ${s.draftId}\` (${s.status}, ${s.requirementCount} requirements)`,
fetchHint: `get_specs(draft_id="${s.draftId}")`
});
return {
type: "spec",
id: s.specId,
id: s.draftId,
title: s.name,

@@ -1546,3 +1546,3 @@ content: formatSpecHeadline(s),

inputSchema: {
spec_id: z8.string().describe("ID of the spec to update"),
draft_id: z8.string().describe("ID of the spec to update"),
section: z8.enum(["proposal", "tasks", "requirements"]).describe("Which section to update"),

@@ -1560,4 +1560,4 @@ content: z8.string().describe(

},
async ({ spec_id, section, content, requirement_name }) => {
const spec = await apiClient.get(`/v1/specs/${spec_id}`);
async ({ draft_id, section, content, requirement_name }) => {
const spec = await apiClient.get(`/v1/specs/${draft_id}`);
if (spec.status !== "draft") {

@@ -1587,4 +1587,4 @@ return {

}
await apiClient.put(`/v1/specs/${spec_id}`, body);
apiClient.invalidateCache(`/v1/specs/${spec_id}`);
await apiClient.put(`/v1/specs/${draft_id}`, body);
apiClient.invalidateCache(`/v1/specs/${draft_id}`);
apiClient.invalidateCache("/v1/specs");

@@ -1648,3 +1648,3 @@ return {

${consequences}` + relatedSection;
await apiClient.put(`/v1/specs/${created.specId}`, {
await apiClient.put(`/v1/specs/${created.draftId}`, {
proposalContent: adrContent

@@ -1657,3 +1657,3 @@ });

type: "text",
text: `Architecture decision recorded: **${adrTitle}** (spec id: ${created.specId})
text: `Architecture decision recorded: **${adrTitle}** (spec id: ${created.draftId})

@@ -1858,3 +1858,3 @@ Status: draft \u2014 review in SystemDox before publishing.`

// src/server.ts
var SERVER_VERSION = true ? "0.1.29" : "0.0.0-dev";
var SERVER_VERSION = true ? "0.1.30" : "0.0.0-dev";
function createServer(apiClient) {

@@ -1861,0 +1861,0 @@ const server = new McpServer({

@@ -351,3 +351,3 @@ #!/usr/bin/env node

inputSchema: {
spec_id: z2.string().optional().describe("Specific spec ID to retrieve with full content"),
draft_id: z2.string().optional().describe("Specific spec ID to retrieve with full content"),
status: z2.enum(["draft", "ready", "archived"]).optional().describe("Filter by status"),

@@ -357,6 +357,6 @@ search: z2.string().optional().describe("Keyword search across spec names")

},
async ({ spec_id, status, search }) => {
if (spec_id) {
async ({ draft_id, status, search }) => {
if (draft_id) {
const spec = await apiClient2.get(
`/v1/specs/${spec_id}`
`/v1/specs/${draft_id}`
);

@@ -410,3 +410,3 @@ const sections = [`# ${spec.name}

const text = filtered.map(
(s) => `- **${s.name}** (${s.specId}) \u2014 ${s.status}, ${s.requirementCount} requirements` + (s.repoFullName ? `, repo: ${s.repoFullName}` : "")
(s) => `- **${s.name}** (${s.draftId}) \u2014 ${s.status}, ${s.requirementCount} requirements` + (s.repoFullName ? `, repo: ${s.repoFullName}` : "")
).join("\n");

@@ -1052,3 +1052,3 @@ return {

return `### ${s.name}
\`spec_id: ${s.specId}\` \xB7 ${s.status} \xB7 ${s.requirementCount} requirements`;
\`draft_id: ${s.draftId}\` \xB7 ${s.status} \xB7 ${s.requirementCount} requirements`;
}

@@ -1085,5 +1085,5 @@ function formatDocHeadline(d) {

}
async function fetchSpecBody(api, specId) {
async function fetchSpecBody(api, draftId) {
const spec = await api.get(
`/v1/specs/${encodeURIComponent(specId)}`
`/v1/specs/${encodeURIComponent(draftId)}`
);

@@ -1204,12 +1204,12 @@ const parts = [];

...specs.filter((s) => s.status !== "archived").map((s) => {
refs.set(key("spec", s.specId), {
refs.set(key("spec", s.draftId), {
type: "spec",
id: s.specId,
id: s.draftId,
title: s.name,
listLine: `- **${s.name}** \u2014 \`spec_id: ${s.specId}\` (${s.status}, ${s.requirementCount} requirements)`,
fetchHint: `get_specs(spec_id="${s.specId}")`
listLine: `- **${s.name}** \u2014 \`draft_id: ${s.draftId}\` (${s.status}, ${s.requirementCount} requirements)`,
fetchHint: `get_specs(draft_id="${s.draftId}")`
});
return {
type: "spec",
id: s.specId,
id: s.draftId,
title: s.name,

@@ -1528,3 +1528,3 @@ content: formatSpecHeadline(s),

inputSchema: {
spec_id: z8.string().describe("ID of the spec to update"),
draft_id: z8.string().describe("ID of the spec to update"),
section: z8.enum(["proposal", "tasks", "requirements"]).describe("Which section to update"),

@@ -1542,4 +1542,4 @@ content: z8.string().describe(

},
async ({ spec_id, section, content, requirement_name }) => {
const spec = await apiClient2.get(`/v1/specs/${spec_id}`);
async ({ draft_id, section, content, requirement_name }) => {
const spec = await apiClient2.get(`/v1/specs/${draft_id}`);
if (spec.status !== "draft") {

@@ -1569,4 +1569,4 @@ return {

}
await apiClient2.put(`/v1/specs/${spec_id}`, body);
apiClient2.invalidateCache(`/v1/specs/${spec_id}`);
await apiClient2.put(`/v1/specs/${draft_id}`, body);
apiClient2.invalidateCache(`/v1/specs/${draft_id}`);
apiClient2.invalidateCache("/v1/specs");

@@ -1630,3 +1630,3 @@ return {

${consequences}` + relatedSection;
await apiClient2.put(`/v1/specs/${created.specId}`, {
await apiClient2.put(`/v1/specs/${created.draftId}`, {
proposalContent: adrContent

@@ -1639,3 +1639,3 @@ });

type: "text",
text: `Architecture decision recorded: **${adrTitle}** (spec id: ${created.specId})
text: `Architecture decision recorded: **${adrTitle}** (spec id: ${created.draftId})

@@ -1840,3 +1840,3 @@ Status: draft \u2014 review in SystemDox before publishing.`

// src/server.ts
var SERVER_VERSION = true ? "0.1.29" : "0.0.0-dev";
var SERVER_VERSION = true ? "0.1.30" : "0.0.0-dev";
function createServer(apiClient2) {

@@ -1843,0 +1843,0 @@ const server2 = new McpServer({

@@ -20,3 +20,3 @@ export { estimateTokens } from "./scoring.js";

export interface SpecSummary {
specId: string;
draftId: string;
name: string;

@@ -23,0 +23,0 @@ status: string;

@@ -282,3 +282,3 @@ #!/usr/bin/env node

return `### ${s.name}
\`spec_id: ${s.specId}\` \xB7 ${s.status} \xB7 ${s.requirementCount} requirements`;
\`draft_id: ${s.draftId}\` \xB7 ${s.status} \xB7 ${s.requirementCount} requirements`;
}

@@ -315,5 +315,5 @@ function formatDocHeadline(d) {

}
async function fetchSpecBody(api, specId) {
async function fetchSpecBody(api, draftId) {
const spec = await api.get(
`/v1/specs/${encodeURIComponent(specId)}`
`/v1/specs/${encodeURIComponent(draftId)}`
);

@@ -434,12 +434,12 @@ const parts = [];

...specs.filter((s) => s.status !== "archived").map((s) => {
refs.set(key("spec", s.specId), {
refs.set(key("spec", s.draftId), {
type: "spec",
id: s.specId,
id: s.draftId,
title: s.name,
listLine: `- **${s.name}** \u2014 \`spec_id: ${s.specId}\` (${s.status}, ${s.requirementCount} requirements)`,
fetchHint: `get_specs(spec_id="${s.specId}")`
listLine: `- **${s.name}** \u2014 \`draft_id: ${s.draftId}\` (${s.status}, ${s.requirementCount} requirements)`,
fetchHint: `get_specs(draft_id="${s.draftId}")`
});
return {
type: "spec",
id: s.specId,
id: s.draftId,
title: s.name,

@@ -446,0 +446,0 @@ content: formatSpecHeadline(s),

{
"name": "@systemdox/mcp-server",
"version": "0.1.29",
"version": "0.1.30",
"mcpName": "io.github.puglieseweb/systemdox",

@@ -5,0 +5,0 @@ "type": "module",

@@ -133,3 +133,3 @@ # @systemdox/mcp-server

docs (`/v1/specs/{id}`, `/v1/docs/{id}/content`) — concurrently, clipped to a
fair share of what's left. Every item carries the `spec_id` / `doc_id` needed to
fair share of what's left. Every item carries the `draft_id` / `doc_id` needed to
fetch it in full, so nothing is a dead end: items whose body did not fit, or

@@ -136,0 +136,0 @@ whose fetch failed, still appear as a title + ID. Tech stack and project rules

Sorry, the diff of this file is too big to display