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

@index365/mcp

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@index365/mcp - npm Package Compare versions

Comparing version
0.1.3
to
0.1.4
+1
-1
package.json
{
"name": "@index365/mcp",
"version": "0.1.3",
"version": "0.1.4",
"description": "index365 MCP server (stdio) for AI-Readiness and Marketing Signal scans plus read-only access to runs and findings. No Website Security scan tool.",

@@ -5,0 +5,0 @@ "mcpName": "io.github.index365usa/index365",

@@ -35,4 +35,6 @@ # @index365/mcp

Read: `list_projects`, `get_run_status`, `list_findings`, `get_finding`, `get_report_context`, `get_marketing_signal_report`, `list_integrations`, `list_connected_signals`. Run: `start_audit`, `run_marketing_signal_audit`.
Read: `list_projects`, `get_run_status`, `list_findings`, `get_finding`, `get_report_context`, `get_marketing_signal_report`, `list_integrations`, `list_connected_signals`. Run: `start_audit`, `run_marketing_signal_audit`. Projects: `create_project`, `archive_project`, and `restore_project`.
`archive_project` reversibly removes a project from active lists while preserving its history and keys. `restore_project` reactivates it. The local stdio server retains `delete_project` only as a deprecated compatibility alias for `archive_project`; the hosted server omits that alias and exposes the truthful archive and restore names. `list_projects` accepts `status=active|paused|archived|all` and excludes archived projects when status is omitted.
Prompts: `triage_findings`, `prepare_pr_plan`, `marketing_fix_plan`, `summarize_run_for_slack`.

@@ -39,0 +41,0 @@

@@ -23,2 +23,4 @@ /** Type declarations for the tool handler logic (handlers.mjs). */

| "create_project"
| "archive_project"
| "restore_project"
| "delete_project";

@@ -25,0 +27,0 @@

@@ -36,2 +36,14 @@ import { ApiError, apiGet, apiRequest } from "./api.mjs";

export function buildHandlers(settings, fetchImpl = fetch) {
const archiveProject = async (args) => {
try {
const data = await apiRequest(settings, "DELETE", `/api/v1/projects/${args.projectId}`, {
query: { confirm: args.confirmDomain },
fetchImpl,
});
return ok(data);
} catch (err) {
return fail(err);
}
};
return {

@@ -43,3 +55,3 @@ async list_projects(args) {

"/api/v1/projects",
{ limit: clampLimit(args.limit), cursor: args.cursor },
{ limit: clampLimit(args.limit), cursor: args.cursor, status: args.status },
fetchImpl,

@@ -200,6 +212,8 @@ );

async delete_project(args) {
archive_project: archiveProject,
async restore_project(args) {
try {
const data = await apiRequest(settings, "DELETE", `/api/v1/projects/${args.projectId}`, {
query: { confirm: args.confirmDomain },
const data = await apiRequest(settings, "PATCH", `/api/v1/projects/${args.projectId}`, {
body: { status: "active" },
fetchImpl,

@@ -212,2 +226,4 @@ });

},
delete_project: archiveProject,
};

@@ -214,0 +230,0 @@ }

@@ -13,3 +13,3 @@ /** Type declarations for the shared MCP tool/prompt registry (register.mjs). */

* @param getHandlers resolves the per-call handler map (carries the API key).
* @param opts.omitTools tool names NOT to mount (remote launch omits delete_project).
* @param opts.omitTools tool names NOT to mount (remote launch omits the deprecated delete_project alias).
*/

@@ -16,0 +16,0 @@ export function registerIndex365Tools(

@@ -29,3 +29,3 @@ import { z } from "zod";

"list_integrations / list_connected_signals describe the connected-source layer; providers report planned until hosted connections launch.",
"Project management: create_project adds a domain-anchored project (idempotent by domain); delete_project removes one and REQUIRES confirmDomain set to the project's exact domain. These need the projects:write / projects:delete scopes.",
"Project management: create_project adds or restores a domain-anchored project; archive_project reversibly hides one and REQUIRES the exact confirmDomain; restore_project reactivates it. delete_project is a deprecated local compatibility alias for archive_project.",
"All access is scoped to the API key's organization. start_audit and run_marketing_signal_audit spend org credits and need the runs:write scope.",

@@ -74,3 +74,3 @@ ].join(" ");

description:
"List the organization's projects (domain-anchored workspaces). Best for: resolving the projectId for start_audit, or seeing which sites exist. Not for: per-project detail (the row already carries it). Paginated: pass cursor from the previous page (default 20, max 50). Common mistake: re-listing every turn instead of caching the projectId you resolved.",
"List the organization's projects (domain-anchored workspaces). Omitted status excludes archived projects; pass active, paused, archived, or all for an exact lifecycle view. Best for: resolving a projectId or finding an archived project to restore. Paginated: pass cursor from the previous page (default 20, max 50).",
inputSchema: {

@@ -85,2 +85,6 @@ limit: z

cursor: z.string().optional().describe("pagination.nextCursor from the previous page"),
status: z
.enum(["active", "paused", "archived", "all"])
.optional()
.describe("Lifecycle filter. Omit to exclude archived projects."),
},

@@ -232,13 +236,55 @@ },

{
name: "archive_project",
config: {
title: "Archive a project",
annotations: {
readOnlyHint: false,
destructiveHint: true,
idempotentHint: true,
openWorldHint: true,
},
description:
"Reversibly archive a project so it leaves active lists and cannot start new runs. Scan history and API keys remain available, and restore_project reactivates the same row. Requires projects:delete. Read first, then pass confirmDomain set to the project's exact domain. Safe to retry.",
inputSchema: {
projectId: z.string().uuid().describe("Project id to archive (from list_projects)"),
confirmDomain: z
.string()
.describe("The project's exact domain, echoed to authorize the archive"),
},
},
},
{
name: "restore_project",
config: {
title: "Restore a project",
annotations: {
readOnlyHint: false,
destructiveHint: false,
idempotentHint: true,
openWorldHint: true,
},
description:
"Restore an archived project to active status without changing its id, history, or keys. Requires projects:write. Find archived ids with list_projects status=archived. Safe to retry; an active project remains active.",
inputSchema: {
projectId: z.string().uuid().describe("Archived project id to restore"),
},
},
},
{
name: "delete_project",
config: {
title: "Delete a project",
annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: true },
title: "Archive a project (legacy alias)",
annotations: {
readOnlyHint: false,
destructiveHint: true,
idempotentHint: true,
openWorldHint: true,
},
description:
"Permanently delete a project and its data (api keys, monitored assets, and monitoring events cascade; run history is preserved). Requires the projects:delete scope. Irreversible. Read-before-destroy: you MUST pass confirmDomain set to the project's exact domain (get it from list_projects first), or the call is rejected. Common mistake: deleting on a guessed projectId without confirming the domain.",
"Deprecated compatibility alias for archive_project. It reversibly archives the project, preserves its history and keys, and can be undone with restore_project. Requires projects:delete. Read first, then pass confirmDomain set to the project's exact domain. New clients should call archive_project.",
inputSchema: {
projectId: z.string().uuid().describe("Project id to delete (from list_projects)"),
projectId: z.string().uuid().describe("Project id to archive (from list_projects)"),
confirmDomain: z
.string()
.describe("The project's exact domain, echoed to authorize the delete"),
.describe("The project's exact domain, echoed to authorize the archive"),
},

@@ -264,4 +310,4 @@ },

// Fail loud on a typo in the omit list: a misspelled name would otherwise
// silently MOUNT a tool meant to be omitted (e.g. the destructive delete_project
// on the public remote surface).
// mount a tool meant to be omitted, such as the deprecated delete_project
// compatibility alias on the public remote surface.
const unknownOmissions = (opts.omitTools ?? []).filter((name) => !TOOL_NAMES.includes(name));

@@ -268,0 +314,0 @@ if (unknownOmissions.length) {

@@ -35,4 +35,4 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";

// stdio mounts the FULL registry (all 12 tools incl. delete_project). The
// remote route omits delete_project for its public launch via opts.omitTools.
// stdio mounts the full 14-tool registry, including the deprecated
// delete_project alias. The remote route omits only that alias.
registerIndex365Tools(server, () => handlers);

@@ -39,0 +39,0 @@

@@ -1,1 +0,1 @@

export const SERVER_VERSION = "0.1.3";
export const SERVER_VERSION = "0.1.4";