File size: 2,079 Bytes
1a9e2c2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# -*- coding: utf-8 -*-
"""FastMCP服务器实例"""

from fastmcp import FastMCP
from fastmcp.server.auth.providers.jwt import StaticTokenVerifier
from app.services.mcp.tools import ask_grok_impl
from app.core.config import setting


def create_mcp_server() -> FastMCP:
    """创建MCP服务器实例,如果配置了API密钥则启用认证"""
    # 检查是否配置了API密钥
    api_key = setting.grok_config.get("api_key")
    
    # 如果配置了API密钥,则启用静态token验证
    auth = None
    if api_key:
        auth = StaticTokenVerifier(
            tokens={
                api_key: {
                    "client_id": "grok2api-client",
                    "scopes": ["read", "write", "admin"]
                }
            },
            required_scopes=["read"]
        )
    
    # 创建FastMCP实例
    return FastMCP(
        name="Grok2API-MCP",
        instructions="MCP server providing Grok AI chat capabilities. Use ask_grok tool to interact with Grok AI models.",
        auth=auth
    )


# 创建全局MCP实例
mcp = create_mcp_server()


# 注册ask_grok工具
@mcp.tool
async def ask_grok(
    query: str,
    model: str = "grok-3-fast",
    system_prompt: str = None
) -> str:
    """
    调用Grok AI进行对话,尤其适用于当用户询问最新信息,需要调用搜索功能,或是想了解社交平台动态(如Twitter(X)、Reddit等)时。

    Args:
        query: 用户的问题或指令
        model: Grok模型名称,可选值: grok-3-fast(默认), grok-4-fast, grok-4-fast-expert, grok-4-expert, grok-4-heavy
        system_prompt: 可选的系统提示词,用于设定AI的角色或行为约束

    Returns:
        Grok AI的完整回复内容,可能包括文本和图片链接(Markdown格式)

    Examples:
        - 简单问答: ask_grok("什么是Python?")
        - 指定模型: ask_grok("解释量子计算", model="grok-4-fast")
        - 带系统提示: ask_grok("写一首诗", system_prompt="你是一位古典诗人")
    """
    return await ask_grok_impl(query, model, system_prompt)