classScopusMCP
# 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
Scored across 2 tools
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.
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.
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.
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.