diff --git a/README.md b/README.md index 11d8a979a..6beaff80e 100644 --- a/README.md +++ b/README.md @@ -578,7 +578,7 @@ SF ships with 24 extensions, all loaded automatically: | **Subagent** | Delegated tasks with isolated context windows | | **GitHub** | Full-suite GitHub issues and PR management via `/gh` command | | **Mac Tools** | macOS native app automation via Accessibility APIs | -| **MCP Client** | Native MCP server integration via @modelcontextprotocol/sdk | +| **MCP Client** | Client-side connections to external MCP tool servers via @modelcontextprotocol/sdk; SF does not expose its workflow as MCP | | **Voice** | Real-time speech-to-text transcription (macOS, Linux — Ubuntu 22.04+) | | **Slash Commands** | Custom command creation | | **Ask User Questions** | Structured user input with single/multi-select | diff --git a/src/resources/extensions/sf/tests/no-sf-mcp-server.test.mjs b/src/resources/extensions/sf/tests/no-sf-mcp-server.test.mjs new file mode 100644 index 000000000..382970d82 --- /dev/null +++ b/src/resources/extensions/sf/tests/no-sf-mcp-server.test.mjs @@ -0,0 +1,22 @@ +import assert from "node:assert/strict"; +import { existsSync } from "node:fs"; +import { join } from "node:path"; +import { test } from "vitest"; + +const repoRoot = join(import.meta.dirname, "../../../../.."); + +test("sfMcpServer_when_removed_stays_absent", () => { + const forbiddenPaths = [ + "packages/mcp-server", + "src/mcp-server.ts", + "src/resources/extensions/sf/mcp-server.js", + ]; + + for (const relativePath of forbiddenPaths) { + assert.equal( + existsSync(join(repoRoot, relativePath)), + false, + `${relativePath} must not be recreated; SF is an MCP client only`, + ); + } +});