Skip to main content
Glama

๐ŸŒŸ 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 ์„œ๋ฒ„๋กœ ์„ค์ •

  1. 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 ์‹œ์ž‘

๐Ÿค ๊ธฐ์—ฌ

  1. ์ด ์ €์žฅ์†Œ๋ฅผ ํฌํฌ

  2. ์ƒˆ๋กœ์šด ๋ธŒ๋žœ์น˜ ๋งŒ๋“ค๊ธฐ ( git checkout -b feature/amazing-feature )

  3. ๋ณ€๊ฒฝ ์ปค๋ฐ‹ ( git commit -m 'โœจ feat: ็ด ๆ™ดใ‚‰ใ—ใ„ๆฉŸ่ƒฝใ‚’่ฟฝๅŠ ' )

  4. ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œ ( git push origin feature/amazing-feature )

  5. ๋Œ์–ด์˜ค๊ธฐ ์š”์ฒญ ๋งŒ๋“ค๊ธฐ

๐Ÿ“„ ๋ผ์ด์„ผ์Šค

MIT License - ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๐Ÿ”— ๊ด€๋ จ ๋งํฌ

๐Ÿ‘ฅ ์œ ์ง€๋ณด์ˆ˜

  • Sunwood AI Labs Team


Available Tools

1 tool
generate_structureA

ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใฎใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชๆง‹้€ ใ‚’็”Ÿๆˆใ—ใ€ใƒ•ใ‚กใ‚คใƒซๅ†…ๅฎนใ‚‚ๅซใ‚ใŸ่ฉณ็ดฐใชใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใ‚’ไฝœๆˆใ—ใพใ™ใ€‚ใƒ—ใƒญใ‚ธใ‚งใ‚ฏใƒˆใ‚„ใƒชใƒใ‚ธใƒˆใƒชใ€ใƒ•ใ‚ฉใƒซใƒ€ใฎๅ†…ๅฎนใ‚’็†่งฃใ™ใ‚‹ใจใใซไฝฟ็”จใ—ใพใ™ใ€‚

NameRequiredDescriptionDefault
pathYesๆง‹้€ ใ‚’็”Ÿๆˆใ™ใ‚‹ใƒ‡ใ‚ฃใƒฌใ‚ฏใƒˆใƒชใฎ็ตถๅฏพใƒ‘ใ‚น
ignorePathNo.SourceSageignoreใƒ•ใ‚กใ‚คใƒซใฎ็ตถๅฏพใƒ‘ใ‚น๏ผˆใ‚ชใƒ—ใ‚ทใƒงใƒณ๏ผ‰

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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. 1 tool updatev1.0.0
    • First observedgenerate_structure

TDQS

A3.7/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of confusion between tools. The tool's purpose is clearly defined and distinct.

Naming Consistency5/5

Since there is only one tool, naming consistency is not applicable, but the single name 'generate_structure' follows a clear verb_noun pattern.

Tool Count2/5

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.

Completeness3/5

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

ActivityInactive
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    A TypeScript-based server project that can be integrated with Cursor IDE as an MCP (Model Control Protocol) server, enabling enhanced development capabilities.
    133
    ISC
  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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 npm
    46
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A 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
    -