mcpField
D
Dayanak

Dayanak

本地服务
avfatihsozer.com法律与政务35 天前更新

关于 Dayanak

Dayanak 是面向土耳其法律研究与文书准备的 MCP 服务,检索官方公开的法院判决和法规,并强调引文可核验。它既可查询本地 SQLite 语料,也可访问实时官方来源,提供核心和扩展工具。

主要功能

  1. 01搜索土耳其法院判决与法规
  2. 02本地全文及语义检索
  3. 03查询实时官方法律来源
  4. 04检查引用并辅助法律文书准备
  5. 05导出文件并检查来源健康状态

适用场景

  1. 01检索特定法律主题的判决和法规
  2. 02基于官方来源准备法律文件
  3. 03核验引文并跟踪法规变更

MCP 相关

Dayanak MCP 服务向客户端提供法律搜索、文档获取、主题研究和导出等工具,默认启用 11 个核心工具,扩展工具可按类别加载。支持 stdio 和 streamable-http 传输。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"afsozer-dayanak": {
"command": "uvx",
"args": [
"dayanak"
]
}
}
}
启动命令uvx dayanak

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypidayanak2.0.0

工具

11

收录的工具列表 · 更新于 2 周前

参数类型必填说明
dilany否
pageinteger否
limitinteger否
queryany否
sourceany否
esas_noany否
sort_byany否
birimAdiany否
karar_noany否
court_typesany否
include_rawboolean否
include_snippetsboolean否
karar_tarihi_endany否
karar_tarihi_startany否

详细介绍

Dayanak

v2.0.1 — 11 个核心 + 36 个扩展 MCP 工具(共 47 个)· 152 条 CLI 命令 · 80 个测试文件 · 48 个源模块

CI DOI

项目页面: avfatihsozer.com/projeler/dayanak · 英文版:README.en.md

面向土耳其官方公开法律资源(判例和法规),用于安全引用的搜索、研究和文档准备 MCP 服务。

项目原名为 emsal-mcp;自 2.0.0 版本起更名为 Dayanak。旧版 emsal-mcp 包现已安装 dayanak,旧的 EMSAL_* 环境变量和 ~/.emsal_mcp 数据目录仍会继续读取。

有两种运行方式:

  • 本地语料库 — 1,110 万份判决和全部现行法规存储在一个 SQLite 文件中;使用 FTS5 全文搜索 + FAISS 语义搜索。无需网络。
  • 实时资源 — Bedesten/Yargıtay、AYM、Danıştay、Uyuşmazlık、Rekabet、 Sayıştay、GİB、mevzuat.gov.tr、Resmî Gazete、KVKK 适配器。

红线

  • 不得捏造判决、元数据、日期、案号/裁判号、法庭、引用或法律条文。
  • 不得将没有 full_text / html_markdown 内容的文档用于引用/草拟。
  • 只有在存在全文/HTML Markdown 时,quoteUsable 和 draftUsable 才为 true。
  • 限流策略有意不设得过于保守;目标场景是单用户/单台电脑。

语料库

测量日期为 2026 年 9 月 16 日,使用实时语料库(cache.sqlite3,72 GB)。

层级指标
判决11.108.242 份文档(documents_v2)。基础数据:HF hamzabagirsakci/turkish-court-decisions(11.045.085,CC0),另加每日 Bedesten 爬取数据。
法规文档14.298 条记录 / 14.171 个现行版本:916 部法律、63 部 KHK、33 部 CBK、8.840 部条例(8.830 部现行)、4.446 份公告(4.329 份现行)
法规条文303.454 条条文,96.186 条修订记录
判决语义索引29.554.075 个分块向量 — intfloat/multilingual-e5-small(384 维),FAISS IVF16384,PQ64 + fp16 sidecar refine,nprobe=128,chunking v2
法规语义索引423.920 个分块向量(来自 303.454 条条文),使用相同的模型和索引类型

详细信息和指标:docs/BULK_INDEX.md。

安装

快速安装(不含语料库)

Dayanak 无需 1,100 万份判决的本地语料库也能运行。在这种情况下,判决和 法规搜索会实时查询官方资源(Bedesten、mevzuat.gov.tr、AYM、Danıştay 等),判决全文也会实时获取。仅在本地语料库中搜索的工具(search_local_corpus、mevzuat_korpus_ara、mevzuat_madde_getir)会返回空结果,并引导至实时工具。需要 Python 3.11 或更高版本。

# Kurmadan doğrudan çalıştırmak için (uv gerekir)
uvx --from dayanak dayanak-server

# ya da kalıcı kurulum
pipx install dayanak

添加到 Claude Code:

claude mcp add dayanak -- uvx --from dayanak dayanak-server

Claude Desktop 或其他 MCP 客户端的配置:

{
  "mcpServers": {
    "dayanak": {
      "command": "uvx",
      "args": ["--from", "dayanak", "dayanak-server"]
    }
  }
}

默认工具配置包含 11 个核心工具;如需启用全部工具,请设置环境变量 DAYANAK_TOOL_PROFILE=full。获取的文档会缓存到 ~/.dayanak/cache.sqlite3 文件中(可通过 DAYANAK_CACHE_PATH 更改)。

开发安装(含语料库)
# Windows
cd <repo-dizini>
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -e ".[dev,mcp,embeddings]"

# macOS / Linux
cd <repo-dizini>
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev,mcp,embeddings]"

dayanak version

若要让语义搜索使用批量 FAISS 索引,还需运行 pip install faiss-cpu。详细安装说明:INSTALL.md。

运行

HTTP(streamable-http)服务

在实时部署中,服务通过 scripts\mcp_http_sunucu.cmd 启动;此脚本会在内部设置环境变量,并将日志写入 %LOCALAPPDATA%\dayanak\mcp_http.log 文件。

.\scripts\mcp_http_sunucu.cmd

在 Windows 上,计划任务 EmsalMcpHttp 会在用户登录时运行同一脚本。端点:http://<host>:<port>/mcp。

stdio 服务
call .\scripts\dayanak-env.cmd
dayanak-server
环境变量
变量用途示例值
DAYANAK_CACHE_PATH语料库 SQLite 文件<veri-dizini>\cache.sqlite3
DAYANAK_BULK_VEC_DIRfp16 向量 sidecar(用于 refine)<bench-dizini>\vec
DAYANAK_EMBEDDING_PROVIDER嵌入提供方fastembed-multilingual-e5
DAYANAK_EMBEDDING_CACHE_DIRONNX 模型缓存<veri-dizini>\models\fastembed
DAYANAK_MCP_TRANSPORTstdio(默认)或 streamable-httpstreamable-http
DAYANAK_MCP_HOST / DAYANAK_MCP_PORTHTTP 监听地址127.0.0.1 / 8790
DAYANAK_TOOL_PROFILEcore(默认)或 fullcore
DAYANAK_TOOL_THREADS同步工具的线程池(0 = 关闭)6
DAYANAK_TOOL_TIMEOUT每个工具的超时秒数180

对于一次性 CLI 调用,scripts\dayanak-env.cmd 会设置相同的变量 (call .\scripts\dayanak-env.cmd && .venv\Scripts\dayanak ...)。

机器专属值(数据目录、监听地址、备份目标)不会保存在仓库中:将 scripts\yerel-ayar.ornek.cmd 复制为 scripts\yerel-ayar.cmd 并填写(该文件已列入 .gitignore)。dayanak-env.cmd、 crawl_incremental.ps1 和 Python 脚本(scripts/_yollar.py)会读取此文件; 留空的路径均从 ~/.dayanak 推导。

MCP 工具

默认配置为 core,包含 11 个已注册工具。其余工具通过 load_extended_tools 按类别加载到正在运行的服务中。契约: docs/MCP_CONTRACTS.md。

Core(11 个):

工具用途
search_decisions搜索实时来源中的裁决(包括路由)
get_document获取单份文档
search_local_corpus在本地 11 M 裁决语料库中进行 FTS5 + 语义搜索
search_legislation在 mevzuat.gov.tr 上搜索法规
get_legislation获取法规文本 / 条文
mevzuat_korpus_ara在本地法规语料库中按条文搜索
mevzuat_madde_getir从本地语料库获取单条法规
research_topic主题研究包(bundle + 质量仪表板)
export_document导出文档
load_extended_tools在运行时加载 Extended 类别
health_check来源/熔断器/索引/定时任务健康状态

Extended(36 个),按类别划分:

类别工具数量工具
legislation1mevzuat_degisiklik_raporu
drafting2citation_check、prepare_petition
files1read_legal_file
meta2list_sources、legal_research_guide
health_admin4circuit_breaker_status、source_health、source_smoke、check_government_servers_health
watch4watch_add、watch_list、watch_run、watch_remove
privacy3privacy_scan、privacy_redact、privacy_audit
chambers4chamber_overview、profile_chamber、chamber_timeline、find_similar_chambers
indexing1index_status
drafting_advanced10draft_document、export_bundle、inspect_petition_pack、build_multi_issue_pack、inspect_multi_issue_pack、list_petition_templates、get_petition_template、build_argument_chain、score_argument、get_argument_strength_report
udf_admin4udf_toolkit_status、udf_authoring_instructions、pdf_toolkit_status、promote_pdf_to_full_text

由于 Core 配置的 docstring 预算(20,000 个字符)已满,citation_check、 prepare_petition、read_legal_file、list_sources 和 legal_research_guide 于 2026 年 9 月 6 日移至 Extended;使用 load_extended_tools 即可重新加载。

CLI 示例

dayanak sources
dayanak search bedesten "muvazaa" --limit 5
dayanak get bedesten DOCUMENT_ID
dayanak semantic bulk-status
dayanak mevzuat korpus-ara "tahliye taahhüdü"
dayanak smoke --offline

语料库抓取 + 面板

长期语料库抓取(从 Bedesten 逐年下载判决)由一个主脚本运行, 并可在浏览器中查看状态。

.\scripts\kur-otomatik-baslatma.ps1          # oturum açılışına ekler (yönetici gerekmez)
.\scripts\kur-otomatik-baslatma.ps1 -Durum   # ne çalışıyor?
.\scripts\kur-otomatik-baslatma.ps1 -Kaldir  # geri al
部分功能
crawl_master.ps1按顺序抓取各年份。使用单实例锁(mutex),将检查点写入 crawl_logs\crawl_state.json——如果 PC 关机,会从中断时的年份和页面继续。
scripts\panel.pyhttp://127.0.0.1:8799 — 实时抓取状态、年份目标、库分布、速度/预估。无需额外依赖。
计划任务EmsalCrawlMaster(登录时 + 1 分钟),EmsalPanel(登录时 + 20 秒)。

注意:

  • 速率限制为 DAYANAK_RATE_LIMIT_MAX=12。实测结果:设为 12 时不会出现 429(约 2,800 份文档/小时), 设为 15 时会进入 429 冷却循环,速度降为零。
  • 面板不会在 cache.sqlite3 上统计年份——单个年份的查询因全表扫描需要约 60 秒。计数会增量保存在 ~/.dayanak/panel_stats.sqlite3 中(仅处理新的 rowid),每天进行一次完整计数。
  • 年份目标取自 Bedesten 的 total 字段(crawl_logs\hedefler.json), 不进行估算。

运维

计划任务(Windows 任务计划程序,语料库服务器):

任务时间脚本功能
EmsalMcpHttp登录时scripts\mcp_http_sunucu.cmd发布 MCP 服务
EmsalCrawlDaily每天 04:30scripts\crawl_incremental.ps1增量抓取判决
EmsalMevzuatWeekly周日 03:00scripts\mevzuat_weekly.cmd法规更新(+ 后续处理 mevzuat_semantic.cmd)
EmsalMonthlyMerge每月 1 日 02:00scripts\monthly_merge.cmd将增量向量合并到 FAISS 索引

health_check 工具会在 scheduled_jobs 块中报告这些任务的最近运行情况:它不会调用 schtasks,而是读取任务在各自日志文件中写入的完成标记和文件时间戳。如果任务运行延迟或以 rc != 0 结束,overall 会返回 "degraded"(src/dayanak/ops_status.py)。 同一输出中的 tool_runtime 块会提供线程池/超时计数器;如果 runaway > 0,则应重启服务。

文档

文档内容
docs/BULK_INDEX.md批量语料库配置、FAISS 索引结构、chunking v2、测量结果、注意事项
docs/MCP_CONTRACTS.mdMCP 工具契约、配置文件、类别
docs/COOKBOOK.md复制即用的工作流配方
docs/JSON_CONTRACTS.md通用 API 函数的 JSON 输出契约
docs/ERROR_CATALOG.md错误代码和建议操作
docs/INDEX.md所有文档的索引
CHANGELOG.md版本历史

测试

.venv\Scripts\python.exe -X utf8 -m pytest tests -q
ruff check src tests scripts

默认跳过访问实时数据源的测试;如需启用,请设置 DAYANAK_LIVE_TESTS=1。

许可证

本项目依据 GNU Affero 通用公共许可证第 3 版授权(AGPL-3.0-only);完整 文本见 LICENSE 文件。如果您修改软件并通过网络向他人提供服务, 则必须也以相同许可证向这些用户提供修改后的源代码。有关如何报告安全漏洞, 请参阅 SECURITY.md。

版权所有 © 2026 Alpaslan Fatih Sözer

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。