模型上下文协议服务器

一个自托管的MCP服务器,为AI助手提供跨对话的持久记忆,通过存储和检索学习内容来优化每次对话。

  • by srclos-net
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 srclos-net/knowledge-mcp

使用说明

知识mcp

一个自托管的MCP(模型上下文协议)服务器,为AI助手提供跨对话的持久内存。人工智能在每次会话开始时查找相关上下文,并写回它发现的学习内容——偏好、要避免的错误、个人上下文、沟通模式——这样未来的每一次对话都比上一次更有信息。

内置Go。将数据存储在以下任一位置 SQLite (简单、独立)或 ChromaDB (语义搜索、现有基础设施)。支持MCP流式HTTP传输,与openwebui和其他MCP客户端兼容。


运作原理

在对话开始时,AI会呼叫 lookup_context 服务器搜索存储的学习信息并返回相关信息——比如你的通信偏好、人工智能过去犯的错误、相关的个人背景或关于你的堆栈的技术细节。人工智能在说话前使用它来校准自己的反应。

在会话结束时(或发现有用的东西时),AI会调用 store_learning 随着时间的推移,商店会建立一个详细的、可搜索的图片,说明如何有效地与你合作。

人工智能直接书写,无需经过人类的批准。您可以随时使用以下命令查看、编辑或修剪条目 list_learnings, update_learning,以及 delete_learning.


暴露的工具

工具 说明
lookup_context 先叫这个。 按关键字搜索存储的学习内容并返回相关内容。增量使用返回结果的计数。
store_learning 使用类别、内容、标签和置信度分数存储新的学习内容。
list_learnings 列出所有存储的学习,可选择按类别过滤。
update_learning 按ID更新现有学习
delete_learning 按ID删除学习
get_stats 返回每个类别的学习次数。

分类

类别 目的
preferences 沟通风格、格式偏好、总是/从不做的事情
personal_context 提供更好回应的相关个人事实
technical 堆栈细节、使用的工具、技术偏好
personal_growth 正在进行的工作、模式、该人正在经历的事情
mistakes 出错的事情以及如何避免重复
general 抓住所有不适合上面的东西

后端

SQLite(默认)

简单、自给自足。磁盘上的单个文件。在可用时使用FTS5全文搜索(Alpine Linux包括在内),回退到按单词搜索 LIKE 否则查询。适用于单实例部署。

数据库在第一次运行时自动创建,除了确保目录存在外,不需要任何设置。

ChromaDB

使用您现有的ChromaDB HTTP API(v2)。使用元数据存储文档。如果您配置了Ollama嵌入模型,嵌入将通过Ollama生成并传递给Chroma,从而为您提供真正的语义搜索而不是关键字匹配。在没有配置嵌入模型的情况下,Chroma使用自己的默认嵌入器。

要求ChromaDB≥0.6(API v2)。


配置

配置是一个TOML文件。打印一个示例:

./self-improvement-mcp --print-config

全参考

[server]
addr = ":8080"          # Listen address

[backend]
type = "sqlite"         # "sqlite" or "chroma"

[sqlite]
path = "/data/learnings.db"   # Path to SQLite file; created automatically

[chroma]
url        = "http://chroma:8000"
tenant     = "default_tenant"    # Chroma v2 tenant (default: "default_tenant")
database   = "default_database"  # Chroma v2 database (default: "default_database")
collection = "self_improvement"  # Collection name; created automatically if missing

# Optional: use Ollama for semantic embeddings
# embedding_model = "nomic-embed-text"
# ollama_url      = "http://ollama:11434"

配置文件解析顺序

服务器按以下顺序查找配置文件,在找到的第一个文件处停止:

  1. --config <path> 旗帜
  2. CONFIG_FILE 环境变量
  3. ./config.toml (当前目录)
  4. /config/config.toml
  5. /etc/self-improvement-mcp/config.toml

如果没有找到配置文件,则应用所有默认值(SQLite后端,端口8080, /data/learnings.db).


在本地运行

从源代码构建

需要Go 1.22+和C编译器(用于SQLite CGO绑定)。

git clone <repo>
cd self-improvement-mcp
go build -o self-improvement-mcp .
./self-improvement-mcp --print-config > config.toml
# edit config.toml as needed
./self-improvement-mcp --config config.toml

使用SQLite运行

mkdir -p data
./self-improvement-mcp --config config.toml

SQLite数据库是自动创建的。不 touch 或者需要预初始化。

使用ChromaDB运行

更新 config.toml:

[backend]
type = "chroma"

[chroma]
url        = "http://192.168.1.20:8001"
collection = "self_improvement"

如果集合不存在,则会在首次运行时自动创建。


使用Docker运行

塑造形象

docker build -t self-improvement-mcp:latest .

Dockerfile使用多阶段Alpine构建。最终图像大小约为15MB。

使用SQLite运行

docker run -d \
  --name self-improvement-mcp \
  -p 8080:8080 \
  -v $(pwd)/config.toml:/config/config.toml:ro \
  -v self-improvement-data:/data \
  self-improvement-mcp:latest

使用ChromaDB运行

docker run -d \
  --name self-improvement-mcp \
  -p 8080:8080 \
  -v $(pwd)/config.toml:/config/config.toml:ro \
  self-improvement-mcp:latest

从另一个容器连接

如果您的MCP客户端(例如openwebui)在容器中运行,而服务器在Docker主机上运行,请使用:

http://host.docker.internal:8080/mcp

在Linux上, host.docker.internal 需要显式配置。添加到客户端容器的compose服务:

extra_hosts:
  - "host.docker.internal:host-gateway"

Kubernetes部署

完整的清单见 k8s.yaml。它包括一个ConfigMap、PVC(用于SQLite)、部署和服务,所有这些都在 ai 命名空间。

部署

# Update the image reference in k8s.yaml first
kubectl apply -f k8s.yaml

通过ConfigMap切换后端

要从SQLite切换到ChromaDB,请编辑ConfigMap并更新 type = "chroma" --无需重建或重新部署,只需滚动重启:

kubectl edit configmap self-improvement-mcp-config -n ai
kubectl rollout restart deployment/self-improvement-mcp -n ai

服务URL(来自群集中)

http://self-improvement-mcp.ai.svc.cluster.local:8080/mcp

连接到打开的webui

在openwebui中,添加一个新的MCP工具服务器:

  • 网址: http://host.docker.internal:8080/mcp (如果在Docker主机上运行)
  • 运输: 可流式传输的HTTP

服务器使用MCP instructions 现场 initialize 响应,告诉AI打电话 lookup_context 在每次谈话的开始。遵循的严格程度取决于模型和openwebui的系统提示配置。


端点

端点 方法 描述
/mcp POST MCP JSON-RPC端点(可流式传输HTTP)
/mcp GET 服务器发起的消息的SSE流
/health GET 健康检查-退货 {"status":"ok","version":"1.0.0"}

MCP协议

服务器实现 MCP 2024-11-05 通过可流式传输的HTTP。支持的方法:

  • initialize
  • notifications/initialized
  • ping
  • tools/list
  • tools/call
  • 批处理请求(JSON数组)

项目结构

self-improvement-mcp/
├── main.go              # Entry point, config loading, server startup
├── config.go            # TOML config types and defaults
├── backend.go           # Backend interface + factory
├── backend_sqlite.go    # SQLite implementation (FTS5 + LIKE fallback)
├── backend_chroma.go    # ChromaDB v2 HTTP API implementation
├── server.go            # Streamable HTTP MCP server
├── tools.go             # Tool definitions and handlers
├── Dockerfile           # Multi-stage Alpine build
└── k8s.yaml             # Kubernetes manifests (ConfigMap, PVC, Deployment, Service)

添加新后端

实施 Backend 接口在 backend.go:

type Backend interface {
    Add(category, content, tags string, confidence float64) (*Learning, error)
    Search(query, category string, limit int) ([]*Learning, error)
    List(category string, limit int) ([]*Learning, error)
    Update(id, content, tags string, confidence float64) error
    Delete(id string) error
    IncrementUseCount(id string)
    Stats() (map[string]int, error)
    Close() error
}

然后将案例添加到 NewBackend 工厂在 backend.go 以及中的新配置部分 config.go.


依赖项

依赖性 目的
github.com/mattn/go-sqlite3 SQLite驱动程序(CGO)
github.com/BurntSushi/toml TOML配置解析

没有其他运行时依赖关系。ChromaDB和Ollama是外部服务,而不是Go依赖项。


许可证

麻省理工学院