iris-mcp服务器模板
这是一个在InterSystems IRIS和MCP服务器中使用嵌入式Python的模板。 它演示了如何从dc.python.test类中的ObjectScript调用python库。 它演示了如何从python脚本python/irisapp.py处理IRIS
什么是嵌入式Python?
嵌入式Python是InterSystems IRIS的一个特性,它允许您 在同一进程中运行python代码 作为IRIS数据库引擎。
嵌入式Python的好处是:
- 演出
- 不需要在IRIS和Python之间序列化数据 - Python中的数据处理速度与ObjectScript相当
- 简洁
- 无需单独安装和配置Python - 易于同时部署IRIS和Python - 从Python轻松访问ObjectScript代码和功能
- 安全
- 不需要为IRIS和Python之间的通信打开任何额外的端口
主要的好处是,您可以在InterSystems IRIS解决方案中使用Python库和框架的所有功能。
先决条件
确保你有 版本控制系统 和 安装。
安装docker
Clone/git将仓库拉入任何本地目录
$ git clone https://github.com/lscalese/iris-mcp-server-template.git打开此目录中的终端并运行:
$ docker-compose build- 在项目中运行IRIS容器:
$ docker-compose up -dIRIS初始化
在这个模板中,提供了两种初始化iris的方法:merge和python。 merge.cpf是设置不同IRIS配置设置的便捷方法。 了解有关merge.cpf的更多信息.
- 使用merge初始化IRIS并创建IRIS数据库和命名空间
通知 合并.cpf 在Dockerfile中构建docker镜像时实现的文件
iris merge IRIS merge.cpf && \其中包括:
[Actions]
CreateResource:Name=%DB_IRISAPP_DATA,Description="IRISAPP_DATA database"
CreateDatabase:Name=IRISAPP_DATA,Directory=/usr/irissys/mgr/IRISAPP_DATA
CreateResource:Name=%DB_IRISAPP_CODE,Description="IRISAPP_CODE database"
CreateDatabase:Name=IRISAPP_CODE,Directory=/usr/irissys/mgr/IRISAPP_CODE
CreateNamespace:Name=IRISAPP,Globals=IRISAPP_DATA,Routines=IRISAPP_CODE,Interop=1
ModifyService:Name=%Service_CallIn,Enabled=1,AutheEnabled=48
ModifyUser:Name=SuperUser,PasswordHash=a31d24aecc0bfe560a7e45bd913ad27c667dc25a75cbfd358c451bb595b6bd52bd25c82cafaa23ca1dd30b3b4947d12d3bb0ffb2a717df29912b743a281f97c1,0a4c463a2fa1e7542b61aa48800091ab688eb0a14bebf536638f411f5454c9343b9aa6402b4694f0a89b624407a5f43f0a38fc35216bb18aab7dc41ef9f056b1,10000,SHA512如您所见,它为数据和代码创建了数据库IRISAPP_DATA和IRISAPP_CODE,创建了相关的IRISAPP命名空间来访问它,并创建了相关资源%IRISAPP_DATA%IRISAPP.CODE“来管理访问。
此外,它还使Callin服务能够通过ModifyService子句使Embedded python工作。 并将内置用户SuperUser的密码更新为“SYS”。此密码的哈希值是通过以下命令获得的:
docker run --rm -it containers.intersystems.com/intersystems/passwordhash:1.1 -algorithm SHA512 -workfactor 10000- 使用python初始化IRIS。
我们经常使用特殊的 iris.script 在初始化过程中运行ObjectScript命令的文件-这里只是为了提供信息。 此模板向您展示了如何将python用于与以下相同的目的 iris_script.py文件。 它是通过Dockerfile中的行执行的:
irispython iris_script.py && \iris_script.py文件包含开发人员如何通过Python代码初始化iris的不同服务的示例。
如何进行测试
从嵌入式Python使用IRIS
如前所述,嵌入式Python在 与IRIS相同的流程.
因此,在IRIS中使用嵌入式Python有两种选择:
- 使用共享文件夹在IRIS容器中运行代码。
- 将VsCode绑定到正在运行的IRIS容器。
在iris容器中运行python脚本:
# attach to the running IRIS container
docker-compose exec iris bash
# run the script
$ irispython ./python/irisapp.py该脚本包含从python使用IRIS的不同示例,并对其进行了演示。 它应该返回如下内容:
Hello World
Method call:
It works!
42
Iris Version:
IRIS for UNIX (Ubuntu Server LTS for ARM64 Containers) 2023.2 (Build 227U) Mon Jul 31 2023 17:43:25 EDT
Creating new record in dc.python.PersistentClass
1
Printing one IRIS Object Dump:
+----------------- general information ---------------
| oref value: 1
| class name: dc.python.PersistentClass
| %%OID: $lb("1","dc.python.PersistentClass")
| reference count: 1
+----------------- attribute values ------------------
| %Concurrency = 1
| Test = "2023-09-03 10:56:45.227577"
+-----------------------------------------------------
1
Running SQL query Select * from dc_python.PersistentClass
[0]: ['1', '2023-09-03 10:56:45.227577']
Printing the whole global of the persistence storage for the class dc.python.PersistentClass:^dc.Package4C8F.PersistentC1A93D
key=['1']: 2023-09-03 10:56:45.227577
James
Jim
John将VSCode绑定到正在运行的IRIS容器
在项目目录中打开VSCode。
去 docker-compose.yml 文件,右键单击它并选择 Compose Up.
容器启动并运行后,您可以打开docker扩展,右键单击容器名称并选择 Attach Visual Studio Code.
从嵌入式Python使用IRIS
在Devcontainer中打开VSCode-这是左下角的铃声(通知)按钮,您将在其中看到在Devcontainer模式下打开VSCode的建议。 遵循它-它将允许执行嵌入式Python脚本与IRIS,并同时进行开发。
打开devcontainer后,转到/python/irisapp.py并运行它,可以使用右上角的run按钮,也可以在终端中通过以下方式运行:
$ irispython python/irisapp.py从ObjectScript使用Python库
打开IRIS终端:
$ docker-compose exec iris iris session iris
USER>zn "IRISAPP"第一个测试演示了对使用dates-datetime的标准python库的调用
IRISAPP>d ##class(dc.python.test).Today()
2021-02-09另一个示例显示了与repo或ZPM一起安装的自定义lib-sample.py的工作。它有一个函数hello,返回字符串“world”:
IRISAPP>d ##class(dc.python.test).Hello()
World另一个示例展示了如何处理文件以及如何使用pandas和numpy-libs。 它计算了泰坦尼克号乘客的平均年龄:
IRISAPP>d ##class(dc.python.test).TitanicMeanAge()
mean age=29.69911764705882
在本地开发python脚本
默认情况下,模板配置为使用共享文件夹 ./python 对于python脚本 /home/irisowner/dev/python 在IRIS容器中。
您可以根据自己的喜好更改文件夹。通常python开发人员在根文件夹中命名项目。
建议使用虚拟环境。
在项目目录中创建虚拟环境。在VS Code菜单中单击New Terminal:
$ python3 -m venv .venv激活虚拟环境:
$ source .venv/bin/activate安装要求:
$ pip install -r requirements.txt使用烧瓶
该模板还包含使用烧瓶的示例。
使用bash终端连接到运行中:
$ docker-compose exec iris bash运行以下命令以启动flask服务器:
irispython python/flask/app.py这将启动烧瓶服务器,您将看到以下输出:
* Serving Flask app 'app'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:50005000 映射到 55030 在docker-compose.yml中
测试IT
你好,世界:
GET http://localhost:55030/
Accept: application/json结果:
{
"message": "Hello world"
}发布一个新的持久类
POST http://localhost:55030/persistentclass
Content-Type: application/json
Accept: application/json
{
"test": "toto"
}结果:
{
"id": 1,
"test": "toto"
}获取持久类
GET http://localhost:55030/persistentclass/1
Accept: application/json结果:
{
"id": 1,
"test": "toto"
}只需添加新的py文件,即可将模板用于您自己的开发。
配置Claude桌面版
增添 %APPDATA%\claude_desktop_config.json
{
"mcpServers": {
"mon-serveur-docker": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:55040/mcp/",
"--allow-http"
]
}
}
}