Skip to main content
Glama
xiandan-erizo

Confluence MCP Server

README.md
# Confluence MCP Server

基于 Model Context Protocol (MCP) 的 Confluence 文档访问服务,提供文档搜索和内容获取功能。

## 功能特性

- **文档搜索**
  - 支持标题和全文搜索
  - 限制返回结果数量
  - 返回匹配内容片段和文档基本信息

- **文档内容获取**
  - 获取完整的页面内容
  - 包含元数据(标题、空间信息、版本等)
  - 创建和修改信息
  - 页面标签

## 快速开始

### 环境配置

创建 `.env` 文件配置 Confluence 访问信息:

```bash
CONFLUENCE_URL="your-confluence-url"
CONFLUENCE_USERNAME="your-username"
CONFLUENCE_PASSWORD="your-password"
# 或者使用 Token 认证
CONFLUENCE_TOKEN="your-api-token"
```

### 安装依赖

```bash
# 安装项目依赖
uv pip install -e .

# 或者直接安装依赖包
uv pip install "mcp[cli]>=1.5.0" "atlassian-python-api>=3.41.4" "typer>=0.9.0"
```

### 运行服务

```bash
# 使用 uvx
/Users/hose/.local/bin/uvx --directory /Users/hose/code/ops/ops-mcp mcp main.py

# 或者使用 uv run
uv run --with mcp mcp run main.py
```

## MCP 接口说明

### Tools (工具)

1. search_confluence
   ```python
   # 搜索 Confluence 内容
   Input:
   - query: str       # 搜索关键词
   - limit: int = 10  # 返回结果数量限制
   
   Output:
   {
     "success": true,
     "query": "搜索词",
     "total": 5,
     "results": [
       {
         "id": "12345",
         "title": "页面标题",
         "type": "page",
         "url": "页面URL",
         "excerpt": "匹配内容片段"
       }
     ]
   }
   ```

2. get_confluence_page
   ```python
   # 获取页面详细信息
   Input:
   - page_id: str  # 页面ID
   
   Output:
   {
     "success": true,
     "page": {
       "id": "12345",
       "title": "页面标题",
       "space": {
         "key": "SPACE",
         "name": "空间名称"
       },
       "version": 1,
       "content": "页面内容",
       "url": "页面URL",
       "created": {
         "date": "创建时间",
         "by": "创建者"
       },
       "modified": {
         "date": "修改时间",
         "by": "修改者"
       },
       "labels": ["标签1", "标签2"]
     }
   }
   ```

### Resources (资源)

1. confluence://pages/{page_id}
   - 通过页面ID直接获取页面内容和元数据
   - 返回 JSON 格式数据

2. confluence://search/{query}
   - 通过关键词直接搜索内容
   - 返回 JSON 格式的搜索结果

## 错误处理

所有接口在出错时返回统一格式:

```json
{
  "success": false,
  "error": "错误信息描述"
}
```

## 使用示例

1. 搜索文档
```python
result = await mcp.use_tool("search_confluence", {
    "query": "Python",
    "limit": 5
})
```

2. 获取页面内容
```python
page = await mcp.use_tool("get_confluence_page", {
    "page_id": "12345"
})
```

3. 使用资源URI
```python
content = await mcp.access_resource("confluence://pages/12345")
search_results = await mcp.access_resource("confluence://search/Python")
```

TDQS

C2.9/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: get_confluence_page retrieves a specific page by ID, while search_confluence performs a broader content search. There is no overlap in functionality, making it easy for an agent to select the appropriate tool based on whether it needs a known page or wants to find pages matching a query.

Naming Consistency5/5

Both tools follow a consistent verb_noun pattern (get_confluence_page and search_confluence) with snake_case naming. The verbs 'get' and 'search' are appropriate and distinct, and the naming scheme is predictable across the set.

Tool Count2/5

With only 2 tools, this server feels severely under-scoped for a Confluence integration. A typical Confluence server would need tools for creating, updating, deleting pages, managing spaces, and handling attachments, among others. This minimal set limits agents to read-only operations, which is inadequate for most workflows.

Completeness2/5

The tool surface is significantly incomplete for a Confluence domain. It only supports retrieving and searching pages, missing essential CRUD operations (create, update, delete), space management, user operations, and content manipulation. Agents will face dead ends when trying to perform basic tasks like editing or organizing content.

Maintenance

ActivityInactive
ResponsivenessNo issues