Stata-MCP:社科科研的 AI 基建

工欲善其事,必先利其器

先从 GIS 说起

2024年的一天,我在图书馆赶我的一篇课程论文,当时还没接触过地理方面的研究和软件,那篇文章也仅仅是参考丁从明等(2018,2020)的一系列南北方差异的研究,当时也是用秦岭淮河线做的一个断点的研究,自然地如果有一个地图插入进去会很好很直观。

于是我兴冲冲下单了陈硕老师的《社会科学研究与地理信息——GIS的应用》⬇️

图片展示的是复旦大学经济学院陈硕教授所著《社会科学研究与地理信息:GIS的应用》一书。该书与上下文关系紧密,上下文提到作者在图书馆准备论文时,因未接触地理研究和软件,下单此书,但不到一个小时便因操作困难而放弃。

书到了,QGIS 也下载好了(ArcGIS 没有 macOS 版本,QGIS 是其开源平替),之后的故事按理说应该挥毫泼墨地把图做出来,但事实却是不到一个小时,让我成功地从入门到放弃。

转机?并没有。

坦白讲,到现在我都没学会 GIS 这类软件该咋用,到现在也没会画图,python能画,但是python不适合;Stata或许也可以,但是我也不会;那AI肯定能画,对的能画,可是它没有环境,一直指挥我的时候我也不知道它说的是啥我又该点什么。

直到2025年初,开源社区里面有个叫做 QGIS-MCP 的东西出现了,帮我解决了这个问题。

其实有了这个东西我还是不会画地图,但是AI会啊,Claude 完全能帮我把图画好,现在这个东西就让AI有了环境并且真正有了手。

MCP - Model Context Protocol

MCP(Model Context Protocol)中文翻译成「模型上下文协议」,名字还是有些抽象的。

什么模型上下文,这上下文不应该是我和AI聊出来的吗?怎么这协议还能改变原来的 user - assistant 的模式吗?

这是我最初看到这个名词时候的真实反应。然后看到下面这张图(一年过去多了,这张图还是最有说服力的)

图片展示了MCP(Model Context Protocol)架构。画面中有一台笔记本电脑,其上标注有“MCP clients client.py”。电脑连接着多个MCP server,分别与Remote services、31、Local data sources等图标对应。右侧有Claude和MCP hosts的标识。该图直观呈现了MCP在不同客户端、服务器及远程服务、本地数据源之间的连接关系,与上下文介绍的MCP是给大模型接入工具、让AI开始工作的协议相契合,帮助理解其工作原理。

简单的说这个 MCP 就是相当于给大模型接入了不同的工具,让AI真的开始工作了,QGIS-MCP 就是通过这个协议来让我的 Claude 能操作我电脑里的 QGIS 来完成画图任务的。

Stata-MCP 为什么会出现?

Stata-MCP 的出现应该是必然事件,原因很简单,因为需要它,至少是我需要有一个工具能够打通 Stata 和大模型。

我在2024年底才刚接触 Stata,它的语法不同于 python,更像是之前我接触过的 Matlab,但那时距离最后一次写 Matlab 大约也有两年了,并且我也不想专门为了写论文来学一个统计软件了。

于是那时的我把目光转向 ChatGPT,AI 这么强,写这些代码肯定不在话下吧?

那时候天真了,误以为 AI 的能力水平有多高,到处都是红色的 error,从导入数据就没顺利过。

那时候真就是初次使用 Stata,不是懵懵懂懂的那种不会用,是彻底不会用,我直接把它给的代码贴到命令行,注释的代码爆红,多行分行的代码跑不通,它甚至给我用井号作为注释的开头(井号 # 是 python 中的注释符号)。

OK,我学会了,这个代码块应该放到 do-file 里用 command+shift+D 来运行。好的,我要大干一场了,twoway 开始报错,无数次的和 ChatGPT debug,复制粘贴复制粘贴,说实话有这时间我都能把我要用的学会了,嗯于是真的去学了下,发现多行命令换行了的话不能在行内写注释。没错就是这么蠢,这个 ChatGPT 和这个不想学软件的我白白浪费了好多天好多 token。

不止如此,还有很多命令,它的语法写的很糟糕,哪怕是把帮助文档丢给它了它都写不好,完全就是一地鸡毛。

哪怕现在,让它画一个平行趋势检验的图都画不好。

一方面,我觉得这种错误是因为缺少环境而非它能力不足;另一方面我实在受够了它这种死活不承认自己错了,还一昧输出自己认为对的代码;此外还有一点接受不了的是不断的从 Chrome 和 Stata 之间来回转,实在是太烦。

于是我想到:既然有 QGIS-MCP,那有没有一个 Stata-MCP 呢?

Google 一下,GitHub 搜一下,可是完全没有人做。

诞生:没轮子就自己造一个

有点难,之前写 python 都是做一些科学计算的东西,跑 pandas,numpy,还有机器学习这些东西,再就是从零开始开发一些自己用的小东西,什么课表转日历、自动抢课、自动跑校园跑,但也都是自己用用的小东西,还没搞过这种有 SDK 的东西(嗯?SDK 是什么东西都不知道,诶不重要)。

那时候 Agent 的概念还没有起来,MCP 的 SDK 的版本号还在 v1.4.0 阶段,能够给 LLMs 加上 MCP 的似乎只有 Claude Desktop 一个,尽管在几个月内陆陆续续多了很多 LLMs Client Desktop Software,但是有一个通病是不能读写文件,如果想读写的话就必须单独再加上一个 filesystem 的 MCP 和一些负责写入文件的 MCP 工具,嗯有点复杂有点乱,我自己都懒得去配置那么多的东西呢。

于是 Stata-MCP 的第一版出现了,只有几个简单的工具:

write_file,stata_do,read_log:

  • write_file:通过 python 的 with open(FILE, "w") 把代码写进文件
  • read_log:with open(FILE, "r") 读取对应文件
  • stata_do:执行 do-file,得益于 Stata 在 macOS 和 Linux 系统中有命令行工具,可以通过命令行工具执行 do-file

于是,Stata-MCP 的第一个版本 v0.1.0 就这样诞生了。

迭代:真需求 or 伪命题

后续的使用中可以说是到处是坑,这篇就不再赘述,但有趣的是后面我陆续加上的功能和 AI 自己提出的需求。

如果我们想要快速用一个 Stata 的命令解决问题,最快的方式是什么?

  • 去网上找图文/视频教程?
  • 去看论文?(目前 finsj 的命令可以做到直接找到 The Stata Journal 中关联命令的论文)
  • 看命令的帮助文档

如果只是想快速上手用起来这个命令的话,对我来说每一种都不够快,不足以让我快速完成任务,因为我的目标函数不是学会这个命令而是使用它,并且使用好它,我觉得最快的方式是让 LLMs 读帮助文档并直接给我我需要的我能跑的命令。

Fine,随之而来的是两个问题:1. 我的机器里是不是有这个包;2. 帮助文档从何而来?

为了解决这两个问题,我分别给 AI 设计了两个工具:ado_package_install 和 help,理解起来也很简单,去网上下载 ado 包以及查看帮助文档。

在没有这两个工具之前,我的 AI 经常会和我说,你去 Stata 里用 ssc install xxx, replace 去安装一下某某命令;你去把帮助文档复制给我,搞得好像我是它的工具一样 😕

尽管没有统计数据,但是长时间的使用告诉我它的代码犯错改正的效果有了显著提升,尽管我们没有告诉它在出错了之后应该查看帮助文档,但是 Claude 极其聪明地在代码的语法出错后立即查看帮助文档去看语法哪里出现了问题。

代码层面的问题解决了,那数据呢?

AI 没有数据的环境,不知道数据是什么样子的,并且连最基本的都有什么变量都不知道,并且 dta 格式的数据文件是不能直接 Read 的。解决方案也应运而生 —— get_data_info 在 Stata-MCP 里就这样出现了。

get_data_info 设计之初是为了让大模型能够知道我的数据的情况以此来让运行更稳定,这个函数目前在 Agent 的背景下更有用,具体等以后有机会专门开一篇文章讲。

一行命令快速使用

有观点认为"社科研究者天然不擅长编程",或真或假,但确实遇到的问题是配置环境很烦,因此项目里做了一键安装的命令:

uvx stata-mcp install

如果没有安装过 uv 可以查看其官方文档进行安装:

# macOS and Linux user
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows user
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

接着,就可以在任意 Agent 平台中使用了,目前提供的一键安装脚本只支持 Claude Desktop、Claude Code、Codex、Gemini CLI、Cursor 和 OpenCode 这些主要的 Agent。

如果想在 OpenClaw 里使用 Stata-MCP 也比较简单,只需要复制下面这段话发给你的 OpenClaw 即可让它自动安装:

Install stata-skill from ClawHub by @SepineTam, some other information from https://www.statamcp.com and https://github.com/sepinetam/stata-mcp

OK,基本的内容就到这里了,更多内容详见项目网站和 GitHub。