SourceSage MCP
๐ SourceSage MCP
๐ ๊ฐ์
SourceSage๋ ํ๋ก์ ํธ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์๋ฆ๋ค์ด ๋งํฌ๋ค์ด ํ์์ผ๋ก ์๊ฐํํ๋ MCP ์๋ฒ์ ๋๋ค. TypeScript๋ก ๊ตฌํ๋์ด ๊ณ ๊ธ ์ฌ์ฉ์ ์ ์ ๋ฐ ์ ์ฐํ ์ ์ธ ํจํด ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ๋ํ ๊ฐ ํ์ผ์ ๋ด์ฉ์ ์๋์ผ๋ก ๋ฌธ์ํํ์ฌ ํ๋ก์ ํธ์ ์ ์ฒด์ ์ธ ๋ชจ์ต์ ํ์ ํ๊ธฐ ์ฝ๊ฒ ํฉ๋๋ค.
Related MCP server: MCP-Typescribe
๐ฏ ์ฃผ์ ํน์ง
๐ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์ ๋งํฌ ๋ค์ด ํ์์ผ๋ก ์ถ๋ ฅ
๐จ ์๋ฆ๋ค์ด ๋๋ฌด ๊ตฌ์กฐ ํ์ (ASCII art)
๐ ํ์ผ ๋ด์ฉ ์๋ ๋ฌธ์ํ(์ธ์ด๋ณ ๊ตฌ๋ฌธ ๊ฐ์กฐํ์ ํฌํจ)
๐ ์ ์ฐํ ์ ์ธ ํจํด(.SourceSageignore)
๐ ES2022 ๋ฐ Node16 ๋ชจ๋ ์์คํ ์ผ๋ก ์ต์ ๊ตฌํ
๐ซ ์๊ฒฉํ ์ ํ ๊ฒ์ฌ๋ก ๋์ ์ ๋ขฐ์ฑ
๐ ๏ธ ๊ธฐ์ ์คํ
๐ท TypeScript (ES2022 ํ๊ฒ)
๐ฆ Model Context Protocol SDK (v0.6.0)
๐ Node.js (Node16 ๋ชจ๋ ์์คํ )
๐ glob (v11.0.0) - ํ์ผ ํจํด ๋งค์นญ
๐ญ ignore (v6.0.2) - ์ ์ฐํ ํ์ผ ์ ์ธ ๊ธฐ๋ฅ
๐ ํ๋ก์ ํธ ๊ตฌ์กฐ
source-sage/
โโโ assets/
โ โโโ header.svg # ใใญใธใงใฏใใใใใผ็ปๅ
โโโ src/
โ โโโ index.ts # ใกใคใณใตใผใใผๅฎ่ฃ
โโโ build/ # ใณใณใใคใซๆธใฟJavaScriptใใกใคใซ
โโโ .gitignore # Gitใฎ้คๅค่จญๅฎ
โโโ .SourceSageignore # SourceSageๅบๆใฎ้คๅค่จญๅฎ
โโโ package.json # ใใญใธใงใฏใ่จญๅฎใปไพๅญ้ขไฟ
โโโ README.md # ใใญใธใงใฏใใใญใฅใกใณใ
โโโ tsconfig.json # TypeScript่จญๅฎโ๏ธ TypeScript ์ค์
{
"compilerOptions": {
"target": "ES2022", // ๆๆฐใฎECMAScriptๆฉ่ฝใๆดป็จ
"module": "Node16", // Node.js 16ใฎๆๆฐใขใธใฅใผใซใทในใใ ใไฝฟ็จ
"moduleResolution": "Node16",
"outDir": "./build", // ใณใณใใคใซๆธใฟใใกใคใซใฎๅบๅๅ
"rootDir": "./src", // ใฝใผในใใกใคใซใฎใซใผใใใฃใฌใฏใใช
"strict": true, // ๅณๆ ผใชๅใใงใใฏใๆๅนๅ
"esModuleInterop": true, // CommonJSใขใธใฅใผใซใจใฎ็ธไบ้็จๆงใ็ขบไฟ
"skipLibCheck": true, // ๅๅฎ็พฉใใกใคใซใฎใใงใใฏใในใญใใ
"forceConsistentCasingInFileNames": true // ใใกใคใซๅใฎๅคงๆๅญๅฐๆๅญใๅณๆ ผใซ็ฎก็
}
}โ๏ธ ์ค์น
npm์์ ์ค์น
npm install -g @sunwood-ai-labs/source-sage-mcp-server์์ค์์ ๋น๋
git clone https://github.com/sunwood-ai-labs/source-sage-mcp-server.git
cd source-sage-mcp-server
npm install
npm run build๐ง ์ฌ์ฉ๋ฒ
MCP ์๋ฒ๋ก ์ค์
MCP ๊ตฌ์ฑ ํ์ผ์ ๋ค์์ ์ถ๊ฐํฉ๋๋ค.
{
"mcpServers": {
"source-sage": {
"command": "node",
"args": ["C:/path/to/source-sage/build/index.js"]
}
}
}๐ฎ ์ฌ์ฉ ๊ฐ๋ฅํ ๋๊ตฌ
generate_structure
ํ๋ก์ ํธ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์์ฑํ๊ณ ํ์ผ ๋ด์ฉ์ ํฌํจํ ์์ธํ ๋ฌธ์๋ฅผ ๋ง๋ญ๋๋ค.
interface GenerateStructureArgs {
// ๆง้ ใ็ๆใใใใฃใฌใฏใใชใฎใใน๏ผๅฟ
้ ๏ผ
// ๅฟ
ใ็ตถๅฏพใในใงๆๅฎใใฆใใ ใใ
path: string;
// .SourceSageignoreใใกใคใซใฎใใน๏ผใชใใทใงใณ๏ผ
// ๆๅฎใใๅ ดๅใฏ็ตถๅฏพใในใงๆๅฎใใฆใใ ใใ
ignorePath?: string;
}์ฌ์ฉ ์
// ็ตถๅฏพใในใงใฎไฝฟ็จ๏ผๆจๅฅจ๏ผ
const result = await mcpClient.callTool('source-sage', 'generate_structure', {
path: 'C:/Users/your-name/path/to/your-project',
ignorePath: 'C:/Users/your-name/path/to/your-project/.SourceSageignore'
});์ถ๋ ฅ ์ํ
์ค์ ํ๋ก์ ํธ ๊ตฌ์กฐ์ ์ถ๋ ฅ ์:
# ๐ Project: source-sage
## ๐ณ ใใฃใฌใฏใใชๆง้
OS: win32
Directory: C:\Users\your-name\source-sage
โโ source-sage/
โโ src/
โ โโ index.ts # MCPใตใผใใผใฎไธป่ฆใชๅฎ่ฃ
โโ package.json # ใใญใธใงใฏใใฎไพๅญ้ขไฟใจ่จญๅฎ
โโ README.md # ใใญใธใงใฏใใฎ่ฉณ็ดฐใช่ชฌๆ
โโ tsconfig.json # TypeScriptใฎใณใณใใคใซ่จญๅฎ์ด ์ถ๋ ฅ์๋ ๋ค์ ์ ๋ณด๊ฐ ํฌํจ๋ฉ๋๋ค.
๐ ํ๋ก์ ํธ ์ด๋ฆ ๋ฐ OS ์ ๋ณด
๐ณ ๋๋ ํ ๋ฆฌ ํธ๋ฆฌ ๊ตฌ์กฐ
๐ ๊ฐ ํ์ผ์ ์ญํ ๊ณผ ์ค๋ช
๐ .SourceSageignore๋ก ๋ถํ์ํ ํ์ผ ์ ์ธ
๐ .SourceSageignore ์ค์
ํ๋ก์ ํธ์ ๋ฃจํธ์ .SourceSageignore ํ์ผ์ ๋ง๋ค๊ณ ์ ์ธํ๋ ค๋ ํจํด์ ์ค๋ช
ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ ์ธ ํจํด์ด ํฌํจ๋ฉ๋๋ค.
# ใใผใธใงใณ็ฎก็ใทในใใ ้ข้ฃ
.git
.gitignore
# ใญใฃใใทใฅใใกใคใซ
__pycache__
.pytest_cache
**/__pycache__/**
*.pyc
# ใใซใใป้
ๅธ้ข้ฃ
build
dist
*.egg-info
# ไธๆใใกใคใซใปๅบๅ
output
output.md
test_output
.SourceSageAssets
.SourceSageAssetsDemo
# ใขใปใใ
*.png
*.svg
assets
# ใใฎไป
LICENSE
example
folder
package-lock.json๐ ์ถ๋ ฅ ์
# ๐ Project: my-project
## ๐ณ ใใฃใฌใฏใใชๆง้
OS: win32
Directory: C:\path\to\my-project
โโ my-project/
โโ src/
โ โโ index.ts
โ โโ utils/
โ โโ helper.ts
โโ package.json
## ๐ ใใกใคใซๅ
ๅฎน
### ๐ `src/index.ts`
**Type**: TypeScript Source File
๐จโ๐ป ๊ฐ๋ฐ์ ์ ๋ณด
์ฃผ์ ๊ตฌํ ์ธ๋ถ์ฌํญ
Server Class :
SourceSageServerํด๋์ค๊ฐ MCP ์๋ฒ์ ํต์ฌ ๊ธฐ๋ฅ์ ์ ๊ณตTree Building :
buildTree๋ฉ์๋๊ฐ ์ฌ๊ท์ ์ผ๋ก ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ตฌ๋ฌธ ๋ถ์๋๋ ํ ๋ฆฌ์ ํ์ผ์ ์ ์ ํ๊ฒ ์ ๋ ฌํ๊ณ ํ์
ํ์ผ ํํฐ๋ง :
ignoreํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฐํ ํ์ผ ์ ์ธ ์คํํ๋ถํ ๊ธฐ๋ณธ ์ ์ธ ํจํด ๋ฐ ๋ง์ถค ์ค์ ์ง์
Content Generation :
ํ์ผ ํ์์ ๋ฐ๋ผ ์ ์ ํ ๊ตฌ๋ฌธ ๊ฐ์กฐํ์
ํ์ผ ํ์์ ๋ฐ๋ผ ์ถ๊ฐ ์ ๋ณด ์ ๊ณต
Async Processing :
globํจํค์ง๋ฅผ ์ฌ์ฉํ ํจ์จ์ ์ธ ํ์ผ ์ค์บ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ํตํ ๋๊ท๋ชจ ํ๋ก์ ํธ ์ง์
๊ฐ๋ฐ ํ๊ฒฝ ์ค์
# ใชใใธใใชใฎใฏใญใผใณ
git clone https://github.com/sunwood-ai-labs/source-sage-mcp-server.git
# ไพๅญ้ขไฟใฎใคใณในใใผใซ
npm install
# ้็บ็จใใซใ
npm run build
# ้็บใตใผใใผใฎ่ตทๅ
npm run inspector์ฌ์ฉ ๊ฐ๋ฅํ npm ์คํฌ๋ฆฝํธ
npm run build: TypeScript ์ปดํ์ผ ๋ฐ ์คํ ๊ถํ ์ค์ npm run prepare: ์ค์น์ ์๋ ๋น๋npm run watch: ๊ฐ๋ฐ ์ ์๋ ์ปดํ์ผnpm run inspector: MCP Inspector ์์
๐ค ๊ธฐ์ฌ
์ด ์ ์ฅ์๋ฅผ ํฌํฌ
์๋ก์ด ๋ธ๋์น ๋ง๋ค๊ธฐ (
git checkout -b feature/amazing-feature)๋ณ๊ฒฝ ์ปค๋ฐ (
git commit -m 'โจ feat: ็ด ๆดใใใๆฉ่ฝใ่ฟฝๅ ')๋ธ๋์น์ ํธ์ (
git push origin feature/amazing-feature)๋์ด์ค๊ธฐ ์์ฒญ ๋ง๋ค๊ธฐ
๐ ๋ผ์ด์ผ์ค
MIT License - ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ญ์์ค.
๐ ๊ด๋ จ ๋งํฌ
๐ฅ ์ ์ง๋ณด์
Sunwood AI Labs Team
Available Tools
1 toolgenerate_structureA
ใใญใธใงใฏใใฎใใฃใฌใฏใใชๆง้ ใ็ๆใใใใกใคใซๅ ๅฎนใๅซใใ่ฉณ็ดฐใชใใญใฅใกใณใใไฝๆใใพใใใใญใธใงใฏใใใชใใธใใชใใใฉใซใใฎๅ ๅฎนใ็่งฃใใใจใใซไฝฟ็จใใพใใ
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ๆง้ ใ็ๆใใใใฃใฌใฏใใชใฎ็ตถๅฏพใใน | |
| ignorePath | No | .SourceSageignoreใใกใคใซใฎ็ตถๅฏพใใน๏ผใชใใทใงใณ๏ผ |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must cover behavioral aspects. It mentions reading file contents and generating a document, but does not disclose side effects, permissions, or performance considerations. Basic transparency but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, concise and front-loaded with the core action. It wastes no words but could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description should clarify the output format. It only says 'detailed document' without specifying the type or delivery method. Missing details for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with parameter descriptions already present. The description adds context about use cases but no additional semantic information beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool generates a directory structure and a detailed document including file contents, with a specific use case. The verb 'generate' and resource 'directory structure' are distinct and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for understanding project contents but does not provide when-not-to-use or alternatives. Since there are no sibling tools, it is minimally adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.0.0- First observed
generate_structure
TDQS
Scored across 1 tool
With only one tool, there is no possibility of confusion between tools. The tool's purpose is clearly defined and distinct.
Since there is only one tool, naming consistency is not applicable, but the single name 'generate_structure' follows a clear verb_noun pattern.
A single tool for a server named 'SourceSage MCP' is too few for the apparent scope. While the tool is substantive, the server lacks complementary tools that would support a typical workflow for project understanding.
The tool covers the core purpose of generating structure and documentation, but there are notable gaps: no ability to list files individually, retrieve specific file contents, or search within the project, limiting granular interactions.
Maintenance
Related MCP Connectors
Serves your design system and coding standards to coding agents, so they stop guessing.
A TypeScript MCP server for Home Assistant, enabling programmatic management of entities, automatiโฆ
Publish Markdown incident reports, ADRs, RFCs and runbooks as web pages, with team spaces.
Document-to-Markdown MCP server โ convert PDF, Office and HTML into LLM-ready Markdown.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceA TypeScript-based server project that can be integrated with Cursor IDE as an MCP (Model Control Protocol) server, enabling enhanced development capabilities.133ISC
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables LLMs to understand and work with TypeScript APIs they haven't been trained on by providing structured access to TypeScript type definitions and documentation.44 npm46MIT
- AlicenseNot gradedqualityDmaintenanceA TypeScript-based document processing server that supports various document formats (.docx, .pdf, .xlsx) and integrates with Model Context Protocol SDK for efficient document context management.1,927 npm1MIT
- FlicenseNot gradedqualityDmaintenanceA TypeScript server that exposes various code automation tools powered by Gemini, including code refactoring, test generation, documentation creation, debugging assistance, and code navigation capabilities.1-