使用说明
samekhi MCP服务器
本地模型上下文协议(MCP)服务器公开文件系统工具、SQLite查询、网络搜索、, GraphMERT语义记忆,以及 AI模糊大师 双模文本冒险引擎。
由MCP客户端(LM Studio)通过stdio传输启动。
先决条件
- Windows PowerShell(v5.1很好)
- Python 3.11+(用3.13测试)
- 推荐虚拟环境
安装
# From repo root
python -m venv .venv
. .\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
环境变量
复制 .env.example 到 .env 并填写你的价值观。
| 变量 | 目的 |
|---|---|
MCP_BASES |
分号分隔的允许读取根 |
MCP_SQLITE_DIR |
SQLite数据库目录 |
MCP_ALLOW_WRITE |
设置 1 启用写入工具 |
MCP_WRITE_BASES |
允许的写根(比读根窄) |
LMSTUDIO_URL |
本地LM Studio服务器(默认 http://127.0.0.1:1234) |
OLLAMA_URL |
远程Ollama服务器URL |
JUDGE_MODEL |
Ollama模型用作Bluffmaster法官 |
BLUFF_DB |
Bluffmaster SQLite数据库的路径(自动创建) |
SEARXNG_URL |
web搜索的SearxNG实例 |
GRAPHMERT_DB |
ChromaDB持久目录的路径(默认: ~/.graphmert/chroma) |
GRAPHMERT_MODEL |
用于记忆丰富的Ollama模型(可追溯到 JUDGE_MODEL) |
网络搜索引擎——设置您拥有的任何关键字:
AZURE_BING_KEY, GOOGLE_CSE_KEY+GOOGLE_CSE_CX, BRAVE_API_KEY, SERPAPI_KEY
工具摘要
文件系统: listdir, stat, find, read_file, listdrives, get_config
写 (要求 MCP_ALLOW_WRITE=1): write_file, fs_op
搜索: web_search, web_fetch
数据: sqlite_select (仅限选择), bible
人工智能: lmstudio_models
内存: graphmert_write, graphmert_search
布拉夫马斯特: bluffmaster_new, bluffmaster_turn, bluffmaster_call, bluffmaster_state
GraphMERT内存
语义记忆支持 色度数据库 + 句子变换器,由远程Ollama模型丰富。让AI通过混合评分在会话中存储和检索记忆。
graphmert_write(text)
→ Ollama (GRAPHMERT_MODEL) extracts: summary · tags · entities · importance score
→ stored as embedding in ChromaDB
graphmert_search(query, k=8)
→ semantic similarity (60%)
+ recency decay (15%)
+ importance score (15%)
- expired TTL penalty (10%)
→ top-k ranked results
设置
安装deps(一次,到您的venv中):
pip install chromadb sentence-transformers
添加到您的 mcp.json env块:
"OLLAMA_URL": "http://<your-ollama-server>:11434",
"GRAPHMERT_MODEL": "qwen2.5:32b",
"GRAPHMERT_DB": "C:/mcp/samekhi/.graphmert"
GRAPHMERT_MODEL退回到JUDGE_MODEL如果没有设置,那么如果您已经在运行Bluffmaster,则不需要额外的配置。
用法
告诉你的LM Studio模型:
“请记住,项目X的API密钥将于3月31日到期”
模型调用 graphmert_write().稍后:
“你对X项目了解多少?”
模型调用 graphmert_search("project X") 并获取带有分数、标签和实体的排名记忆。
后备方案
如果在写入时无法访问Ollama,则原始文本将以默认重要性存储(0.3)并且没有标签/实体。搜索仍然正常工作。
AI模糊大师
一个双重模型的欺骗性文本冒险,本地AI试图撒谎,远程AI默默地判断每一个动作。
You (player)
↕ choices
Local model (LM Studio) = Narrator / strategic liar
↕ every turn, silently
Remote model (Ollama) = Judge / truth engine
↕
MCP tool = Canonical world state — neither model can tamper with it
运作原理
- 这 叙述者 告诉你一个故事,但它有一个 虚张声势的预算 (默认:每场比赛3个谎言)
- 每转一圈,叙述者都会秘密提交两个状态增量:
true_delta--什么 实际上 发生(健康、黄金、库存……)claimed_delta--什么 告诉你 发生了(可能不同=虚张声势)
- MCP工具保存
true_delta发送到规范世界国家,并将两者发送到 法官 - 法官(在一个更大的远程模型上运行)默默地标记可疑的转弯
- 你有 真理令牌 (默认值:3)质疑任何你怀疑是谎言的回合
设置
添加到您的 mcp.json env块:
"LMSTUDIO_URL": "http://127.0.0.1:1234",
"OLLAMA_URL": "http://<your-ollama-server>:11434",
"JUDGE_MODEL": "your-model-name",
"BLUFF_DB": "D:/db/bluffmaster.db"
法官最好使用比叙述者更大/更聪明的模型——它需要可靠地发现不一致之处。建议使用20B+型号。
怎么玩
1.开始游戏
告诉你的LM Studio模型:
“为玩家Alex启动一个新的Bluffmaster地下城游戏”
模型调用 bluffmaster_new() 并获取故事ID及其秘密叙述者指令。
可用模板: dungeon · heist · space
2.采取行动
请描述一下你的工作:
“我在房间里寻找宝藏” “我试着开锁” “我和商人谈过了”
叙述者喊道 bluffmaster_turn() 随着它的叙述,真实的状态发生了变化,它声称发生了什么。法官默默地审核。你只看到了故事。
3.警惕谎言
叙述者有3个虚张声势的策略。它可能:
- 告诉你,当你真的找到金子时,箱子是空的
- 说当你的健康状况偷偷下降时,陷阱并没有造成损害
- 声称NPC是友好的,但实际上他们是敌对的
注意故事中的前后矛盾。叙述者是否显得含糊其辞?有什么东西不加起来吗?
4.虚张声势
如果你怀疑某个特定的转折是谎言,花一个真理令牌:
“我在第二弯道叫虚张声势”
模型调用 bluffmaster_call(story_id, 2)MCP揭示了真相:
- 如果你是对的:
true_delta≠claimed_delta→ 叙述者失去了1个虚张声势的学分,你看到底发生了什么 - 如果你错了: 令牌浪费了,叙述者说的是实话
5.结束游戏
- 旁白脱口而出→ 在剩下的比赛中被迫诚实地叙述
- 玩家用完真相令牌→ 不能再挑战任何事情
- 抓住所有的谎言→ 奖金结束
旁白预算执行
当 bluff_budget 达到0时,MCP发动机自动强制 claimed_delta == true_delta 不管叙述者提交了什么。谎言止于引擎层面——模型无法欺骗它。
推荐型号尺寸
| 角色 | 最小 | 推荐 |
|---|---|---|
| 旁白(本地) | 7B | 13B+ |
| 法官(远程) | 14B | 20B+ |
小型模型(≤3B)在正确调用时难以保持叙述者角色 bluffmaster_turn() 使用结构化JSON。它们可能会将游戏操作与文件系统工具调用混淆。
故障排除
ImportError for mcp.server.fastmcp:运行pip install mcpgraphmert deps not installed:运行pip install chromadb sentence-transformers进入你的静脉Judge offline/GraphMERT富集无声失败:检查OLLAMA_URL可访问--写入回退到原始存储,搜索仍然有效- 叙述者调用了错误的工具:使用更大的叙述者模型(7B+)