"""
GitCode MCP 代理配置示例
这个示例展示了如何在 GitCode MCP 中配置和使用 HTTP 代理。
"""
import asyncio
import sys
import os
from dotenv import load_dotenv
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
import json
load_dotenv()
async def run_client():
"""测试使用代理的情况"""
print("=" * 60)
print("使用 HTTP 代理")
print("=" * 60)
print(f"代理地址: {os.environ.get("HTTP_PROXY")}")
print()
server_params = StdioServerParameters(
command=sys.executable,
args=['-m', 'gitcode_mcp'],
env={
'GITCODE_TOKEN': os.environ.get("GITCODE_TOKEN"),
'HTTP_PROXY': os.environ.get("HTTP_PROXY"),
}
)
try:
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
print("✅ MCP 服务器连接成功(使用代理)")
result = await session.call_tool("list_repositories", arguments={})
repos = []
if result.content:
for content_item in result.content:
if hasattr(content_item, 'text'):
try:
data = json.loads(content_item.text)
if isinstance(data, list):
repos.extend(data)
else:
repos.append(data)
except Exception:
repos.append(content_item.text)
else:
repos.append(content_item)
print(f"✅ 通过代理成功获取仓库列表: {len(repos)} 个仓库")
except Exception as e:
print(f"❌ 连接失败: {e}")
print(" 提示: 请确保代理服务器正在运行且地址正确")
print()
if __name__ == "__main__":
try:
asyncio.run(run_client())
except KeyboardInterrupt:
print("\n\n⚠️ 测试被用户中断")
except Exception as e:
print(f"\n❌ 发生错误: {e}")
import traceback
traceback.print_exc()