Ollama MCP代理
使用的Java CLI代理 奥拉玛 对于局部LLM推断, LangChain4j 对于编排, PicoCLI 对于命令行界面,以及 MCP(模型上下文协议) 用于工具集成。
包括一个提供随机报价的示例MCP服务器。
建筑
┌────────────────────────────────────────────────┐
│ Agent │
│ ┌──────────┐ ┌────────────┐ ┌──────────┐ │
│ │ PicoCLI │→ │ LangChain4j│→ │ Ollama │ │
│ │ (CLI) │ │ AiServices │ │ (LLM) │ │
│ └──────────┘ └─────┬──────┘ └──────────┘ │
│ │ │
│ ┌──────┴──────┐ │
│ │McpToolProvider│ │
│ └──────┬──────┘ │
└──────────────────────┼─────────────────────────┘
│ STDIO
┌────────┴────────┐
│ Quote Server │
│ (MCP Server) │
└─────────────────┘先决条件
- Java 21 (LTS)
- Maven 3.x
- 奥拉玛 安装并运行模型(例如。,
ollama pull llama3.2)
构建
cd ollama-mcp-agent
mvn clean package这将构建所有三个模块,并为代理和报价服务器生成胖JAR。
用法
无需MCP即可运行代理(与Ollama直接聊天)
java -jar agent/target/agent-1.0.0-SNAPSHOT.jar使用报价MCP服务器运行代理
java -jar agent/target/agent-1.0.0-SNAPSHOT.jar \
--mcp-server "java -jar quote-server/target/quote-server-1.0.0-SNAPSHOT.jar"然后询问报价:
You: Give me an inspirational quote
Assistant: "The future belongs to those who believe in the beauty of their dreams." — Eleanor Roosevelt [INSPIRATION]CLI选项
| 选项 | 简短 | 描述 | 默认 |
|---|---|---|---|
--model | -m | Olama型号名称 | llama3.2 |
--url | -u 基础 URL | http://localhost:11434 | |
--mcp-server | MCP服务器命令(可重复) | 无 | |
--help | -h | 显示帮助 | |
--version | -V | 显示版本 |
例子
使用不同的模型:
java -jar agent/target/agent-1.0.0-SNAPSHOT.jar -m mistral连接到远程Ollama实例:
java -jar agent/target/agent-1.0.0-SNAPSHOT.jar -u http://192.168.1.100:11434多个MCP服务器:
java -jar agent/target/agent-1.0.0-SNAPSHOT.jar \
--mcp-server "java -jar quote-server/target/quote-server-1.0.0-SNAPSHOT.jar" \
--mcp-server "python my-other-server.py"项目结构
ollama-mcp-agent/
├── pom.xml # Parent POM with dependency management
├── quote-common/ # Shared DTOs (Quote, QuoteCategory)
├── quote-server/ # MCP server providing random quotes
│ └── QuoteServerMain # Entry point (STDIO transport)
│ └── QuoteToolHandler # Tool definitions
│ └── InMemoryQuoteRepository # 20 hardcoded quotes
└── agent/ # CLI agent application
├── AgentCommand # PicoCLI entry point (Facade)
├── config/ # Configuration (Builder pattern)
├── llm/ # LLM abstraction (Strategy pattern)
├── mcp/ # MCP client management
├── chat/ # Chat session and AI Services
├── event/ # Event system (Observer pattern)
└── io/ # Console I/O abstraction设计模式
| 模式 | 地点 | 原因 |
|---|---|---|
| 战略 | ChatModelProvider | 可更换LLM后端 |
| 工厂 | ChatModelProviderFactory, AssistantServiceFactory | 集中式对象创建 |
| 建设者 | AgentConfigBuilder | 复杂的不可变配置构造 |
| 观察员 | ChatEventListener / ChatEvent | 解耦事件处理 |
| 存储库 | QuoteRepository / InMemoryQuoteRepository | 抽象数据访问 |
| 立面 | AgentCommand.run() | 编排启动顺序 |
如何扩展
添加新的LLM提供程序
- 实施
ChatModelProvider接口 - 更新
ChatModelProviderFactory根据配置返回您的提供者
添加新的MCP服务器
- 使用Java MCP SDK创建服务器(请参阅
quote-server作为参考) - 通过
--mcp-server "command to start your server"
向报价服务器添加新工具
- 添加新
SyncToolSpecification在QuoteToolHandler - 代理将通过MCP自动发现它
技术栈
| 库 | 版本 | 目的 |
|---|---|---|
| Java | 21 | 语言 |
| Maven | 3.x | 构建工具 |
| LangChain4j | 1.0.0-b2 | LLM版本。 |
| PicoCLI | 4.7.7 | CLI解析 |
| J MCP SD K | 0.10.0 | MCP服务器 |
| JUnit5 | 5.11.3 | 测试 |
| Mockito | 5.14.2 | 模仿 |
