MCP Feishu Project Manager
by Roland0511
Verified
- mcp-feishu-proj
- src
- mcp_server
from mcp.server.fastmcp import FastMCP
from .fsprojclient import FSProjClient, WorkItemType
from typing import Literal
import os
import sys
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
# 检查必需的环境变量
required_env_vars = [
"FS_PROJ_PROJECT_KEY",
"FS_PROJ_USER_KEY",
"FS_PROJ_PLUGIN_ID",
"FS_PROJ_PLUGIN_SECRET"
]
missing_vars = []
for var in required_env_vars:
if not os.getenv(var):
missing_vars.append(var)
if missing_vars:
print(f"错误: 缺少以下必需的环境变量: {', '.join(missing_vars)}")
print("请确保这些环境变量已在.env文件中设置或已在系统环境中定义")
sys.exit(1)
host = os.getenv("SSE_SERVER_HOST", "0.0.0.0")
port = int(os.getenv("SSE_SERVER_PORT", "8000"))
mcp = FastMCP("feishuproj-mcp-server", host=host, port=port)
client = FSProjClient(
os.getenv("FS_PROJ_BASE_URL", "https://project.feishu.cn/"),
project_key=os.getenv("FS_PROJ_PROJECT_KEY"),
user_key=os.getenv("FS_PROJ_USER_KEY"),
plugin_id=os.getenv("FS_PROJ_PLUGIN_ID"),
plugin_secret=os.getenv("FS_PROJ_PLUGIN_SECRET"),
)
@mcp.tool("get_view_list")
def get_view_list(work_item_type_key: WorkItemType):
"""获取飞书项目视图列表
Args:
work_item_type_key: 工作项类型,可选值为"story"、"version"、"issue", 分别对应需求、版本、缺陷。
"""
client.get_plugin_token()
return client.get_view_list(work_item_type_key)
@mcp.tool("get_view_detail")
def get_view_detail(view_id: str, page_num: int = 1, page_size: int = 20):
"""获取飞书项目视图工作项列表
Args:
view_id: 视图标识
page_num: 页码,默认为1
page_size: 每页数量,默认为20
"""
client.get_plugin_token()
return client.get_view_detail(view_id, page_num, page_size)
@mcp.tool("get_work_item_detail")
def get_work_item_detail(work_item_type_key: WorkItemType, work_item_ids: str):
"""获取飞书项目工作项详情
Args:
work_item_type_key: 工作项类型,可选值为"story"、"version"、"issue", 分别对应需求、版本、缺陷。
work_item_ids: 工作项ID,多个ID之间用逗号分隔
"""
client.get_plugin_token()
id_list = [int(id.strip()) for id in work_item_ids.split(",")]
return client.get_workitem_detail(work_item_type_key, id_list)
@mcp.tool("get_work_item_type_meta")
def get_work_item_type_meta(work_item_type_key: WorkItemType):
"""获取飞书项目工作项类型元数据
- 在工作项详情的"fields"字段中各个字段的具体意义及信息可以在工作项类型元数据中获取
Args:
work_item_type_key: 工作项类型,可选值为"story"、"version"、"issue", 分别对应需求、版本、缺陷。
"""
client.get_plugin_token()
return client.get_work_item_type_meta(work_item_type_key)