Skip to main content
Glama
TaehongKim

classScopusMCP

by TaehongKim
README.md
# ClassScopus MCP Tool

๐Ÿ“š **Model Context Protocol (MCP) ๋„๊ตฌ๋กœ ํ•™์ˆ  ๋…ผ๋ฌธ ๊ฒ€์ƒ‰ ๋ฐ ์ดˆ๋ก ๊ฐ€์ ธ์˜ค๊ธฐ**

Scopus, Crossref, PubMed API๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ๋…ผ๋ฌธ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ดˆ๋ก์„ ๊ฐ€์ ธ์˜ค๋Š” MCP ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. Claude Desktop, Cursor, Ollama ๋“ฑ MCP๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  AI ํด๋ผ์ด์–ธํŠธ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

## โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

- ๐Ÿ” **๋…ผ๋ฌธ ๊ฒ€์ƒ‰**: Scopus API๋ฅผ ํ†ตํ•œ ๊ฐ•๋ ฅํ•œ ํ•™์ˆ  ๋…ผ๋ฌธ ๊ฒ€์ƒ‰
- ๐Ÿ“„ **์ดˆ๋ก ๊ฐ€์ ธ์˜ค๊ธฐ**: Crossref, PubMed์—์„œ ์ž๋™์œผ๋กœ ์ดˆ๋ก ์ˆ˜์ง‘
- ๐Ÿ”„ **๋‹ค์ค‘ ์†Œ์Šค**: ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ตœ๊ณ  ํ’ˆ์งˆ์˜ ์ดˆ๋ก ์„ ํƒ
- ๐Ÿ›ก๏ธ **๋ณด์•ˆ**: ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•œ ์•ˆ์ „ํ•œ API ํ‚ค ๊ด€๋ฆฌ
- ๐Ÿš€ **๊ฐ„ํŽธ ์„ค์น˜**: npx๋กœ ์ฆ‰์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
- ๐Ÿ **Python ๋ ˆ๊ฑฐ์‹œ**: ๊ธฐ์กด Python ๋ฒ„์ „ ์ฝ”๋“œ ํฌํ•จ

## ๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

### 1. ์„ค์น˜

```bash
# NPM์„ ํ†ตํ•œ ์ „์—ญ ์„ค์น˜
npm install -g abstract-search-mcp

# ๋˜๋Š” npx๋กœ ์ฆ‰์‹œ ์‚ฌ์šฉ
npx abstract-search-mcp
```

### 2. API ํ‚ค ์„ค์ •

Scopus API ํ‚ค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. [Elsevier Developer Portal](https://dev.elsevier.com/)์—์„œ ๋ฌด๋ฃŒ๋กœ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#### ๋ฐฉ๋ฒ• 1: ํ™˜๊ฒฝ๋ณ€์ˆ˜ (๊ถŒ์žฅ)
```bash
export SCOPUS_API_KEY="your_scopus_api_key_here"
```

#### ๋ฐฉ๋ฒ• 2: ์„ค์ • ํŒŒ์ผ
```bash
# config.json ํŒŒ์ผ ์ƒ์„ฑ
cp config.example.json config.json
# config.json ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜์—ฌ API ํ‚ค ์ž…๋ ฅ
```

### 3. MCP ํด๋ผ์ด์–ธํŠธ ์„ค์ •

#### Claude Desktop
`~/.claude_desktop_config.json` (macOS) ๋˜๋Š” `%APPDATA%\Claude\claude_desktop_config.json` (Windows):

```json
{
  "mcpServers": {
    "abstract-search": {
      "command": "npx",
      "args": ["abstract-search-mcp"],
      "env": {
        "SCOPUS_API_KEY": "your_scopus_api_key_here"
      }
    }
  }
}
```

#### Cursor
ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์˜ `.cursor/mcp_config.json`:

```json
{
  "mcpServers": {
    "abstract-search": {
      "command": "npx",
      "args": ["abstract-search-mcp"],
      "env": {
        "SCOPUS_API_KEY": "your_scopus_api_key_here"
      }
    }
  }
}
```

#### Ollama
MCP ์„ค์ • ํŒŒ์ผ์— ์ถ”๊ฐ€:

```json
{
  "mcpServers": {
    "abstract-search": {
      "command": "npx",
      "args": ["abstract-search-mcp"],
      "env": {
        "SCOPUS_API_KEY": "your_scopus_api_key_here"
      }
    }
  }
}
```

## ๐Ÿ› ๏ธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

### ๋…ผ๋ฌธ ๊ฒ€์ƒ‰
```
search_papers๋ฅผ ์‚ฌ์šฉํ•ด์„œ 'machine learning' ๊ด€๋ จ ๋…ผ๋ฌธ์„ 5๊ฐœ ๊ฒ€์ƒ‰ํ•ด์ค˜
```

### DOI๋กœ ์ดˆ๋ก ๊ฐ€์ ธ์˜ค๊ธฐ
```
get_abstract_by_doi๋ฅผ ์‚ฌ์šฉํ•ด์„œ DOI '10.1038/nature12373'์˜ ์ดˆ๋ก์„ ๊ฐ€์ ธ์™€์ค˜
```

## ๐Ÿ“‹ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋„๊ตฌ

### 1. search_papers
ํ‚ค์›Œ๋“œ๋กœ ๋…ผ๋ฌธ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์ดˆ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

**๋งค๊ฐœ๋ณ€์ˆ˜:**
- `query` (ํ•„์ˆ˜): ๊ฒ€์ƒ‰ํ•  ํ‚ค์›Œ๋“œ
- `count` (์„ ํƒ): ๊ฒ€์ƒ‰ํ•  ๋…ผ๋ฌธ ์ˆ˜ (๊ธฐ๋ณธ๊ฐ’: 10, ์ตœ๋Œ€: 50)

### 2. get_abstract_by_doi
DOI๋กœ ํŠน์ • ๋…ผ๋ฌธ์˜ ์ดˆ๋ก์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

**๋งค๊ฐœ๋ณ€์ˆ˜:**
- `doi` (ํ•„์ˆ˜): ๋…ผ๋ฌธ์˜ DOI

## ๐Ÿ”ง ๊ฐœ๋ฐœ์ž ์ •๋ณด

### ๋กœ์ปฌ ๊ฐœ๋ฐœ

```bash
# ์ €์žฅ์†Œ ๋ณต์ œ
git clone https://github.com/TaehongKim/classScopusMCP.git
cd classScopusMCP

# ์˜์กด์„ฑ ์„ค์น˜
npm install

# ๋กœ์ปฌ ๋งํฌ
npm link

# ํ…Œ์ŠคํŠธ
npx abstract-search-mcp
```

### ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

```
classScopusMCP/
โ”œโ”€โ”€ abstract-search-server.js    # ๋ฉ”์ธ MCP ์„œ๋ฒ„
โ”œโ”€โ”€ bin/
โ”‚   โ””โ”€โ”€ abstract-search.js       # ์‹คํ–‰ ๋ž˜ํผ
โ”œโ”€โ”€ config.example.json          # ์„ค์ • ํŒŒ์ผ ์˜ˆ์‹œ
โ”œโ”€โ”€ claude_desktop_config.example.json  # Claude Desktop ์„ค์ • ์˜ˆ์‹œ
โ”œโ”€โ”€ package.json                 # ํŒจํ‚ค์ง€ ์ •๋ณด
โ”œโ”€โ”€ .npmignore                   # NPM ๋ฌด์‹œ ํŒŒ์ผ
โ”œโ”€โ”€ README.md                    # ๋ฉ”์ธ ๋ฌธ์„œ
โ”œโ”€โ”€ MCP_SETUP_GUIDE.md          # MCP ์„ค์ • ๊ฐ€์ด๋“œ
โ”œโ”€โ”€ MCP_USAGE_GUIDE.md          # MCP ์‚ฌ์šฉ ๊ฐ€์ด๋“œ
โ”œโ”€โ”€ DEPLOYMENT.md               # ๋ฐฐํฌ ๊ฐ€์ด๋“œ
โ””โ”€โ”€ python-legacy/              # Python ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ
    โ”œโ”€โ”€ scopusAPI.py            # Python Scopus API
    โ”œโ”€โ”€ mcp_abstract_search_server.py  # Python MCP ์„œ๋ฒ„
    โ””โ”€โ”€ requirements_mcp.txt     # Python ์˜์กด์„ฑ
```

## ๐ŸŒ ์ง€์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

- **Scopus**: ์ฃผ์š” ๊ฒ€์ƒ‰ ์—”์ง„
- **Crossref**: DOI ๊ธฐ๋ฐ˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ ์ดˆ๋ก
- **PubMed**: ์˜ํ•™/์ƒ๋ฌผํ•™ ๋…ผ๋ฌธ ์ดˆ๋ก

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

MIT License - ์ž์„ธํ•œ ๋‚ด์šฉ์€ [LICENSE](LICENSE) ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

## ๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

๊ธฐ์—ฌ๋ฅผ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! Issue๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ Pull Request๋ฅผ ์ œ์ถœํ•ด ์ฃผ์„ธ์š”.

## ๐Ÿ“ž ์ง€์›

- GitHub Issues: [์ด์Šˆ ์ƒ์„ฑ](https://github.com/TaehongKim/classScopusMCP/issues)
- ๋ฌธ์„œ: [MCP ๊ณต์‹ ๋ฌธ์„œ](https://modelcontextprotocol.io/)

## ๐ŸŽฏ ๋กœ๋“œ๋งต

- [x] Scopus API ํ†ตํ•ฉ
- [x] Crossref API ํ†ตํ•ฉ
- [x] PubMed API ํ†ตํ•ฉ
- [x] MCP ์„œ๋ฒ„ ๊ตฌํ˜„
- [x] Python ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ํฌํ•จ
- [ ] arXiv API ํ†ตํ•ฉ
- [ ] Google Scholar ์ง€์›
- [ ] ์ธ์šฉ ์ •๋ณด ์ถ”๊ฐ€
- [ ] ๋…ผ๋ฌธ ์ „๋ฌธ ๋งํฌ ์ œ๊ณต
- [ ] ์บ์‹ฑ ๊ธฐ๋Šฅ ์ถ”๊ฐ€

## ๐Ÿ“š ์ถ”๊ฐ€ ๋ฌธ์„œ

- [MCP ์„ค์ • ๊ฐ€์ด๋“œ](MCP_SETUP_GUIDE.md) - MCP ์„œ๋ฒ„ ์„ค์ • ๋ฐฉ๋ฒ•
- [MCP ์‚ฌ์šฉ ๊ฐ€์ด๋“œ](MCP_USAGE_GUIDE.md) - ์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ์‹œ
- [๋ฐฐํฌ ๊ฐ€์ด๋“œ](DEPLOYMENT.md) - NPM ๋ฐฐํฌ ๋ฐ ๋ฐฐํฌ ์ „๋žต

---

**Made with โค๏ธ for the academic research community**

TDQS

A3.8/5.0

Scored across 2 tools

Disambiguation5/5

The two tools are clearly distinct: one searches by keyword, the other retrieves a specific paper by DOI. There is no ambiguity in purpose, as each targets a different lookup method.

Naming Consistency5/5

Both tool names follow a consistent verb_noun pattern with snake_case: 'search_papers' and 'get_abstract_by_doi'. The naming is predictable and descriptive.

Tool Count4/5

While only two tools are provided, they are well-scoped for the stated purpose of searching papers and fetching abstracts by DOI. The count is slightly lean but not unreasonable for a focused utility.

Completeness4/5

The tool set covers the essential operations for finding papers and obtaining abstracts. Minor gaps exist, such as lack of citation data or full metadata retrieval, but the core workflow is complete.

Maintenance

ActivityInactive
ResponsivenessNo issues