Sessionize事件数据查询工具

一个用于从MCP兼容的AI助手访问Sessionize事件数据(演讲者、会议和日程)的服务器。

  • by labjp-mcp
  • Java
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 jeanlopezxyz/mcp-sessionize

使用说明

会话化MCP服务器

用于访问的MCP服务器 会话 事件数据——演讲者、会话和日程——来自任何兼容MCP的AI助手(Claude Desktop、Claude Code、Cursor、Windsurf、VS Code……)。

内置于 Quarkus 3.33+Java 25+Quarkus MCP服务器1.13,作为小型本地可执行文件(Mandrel)分发,并通过 npx mcp-sessionize.


特征

工具

工具 说明
sessionize_get_speakers 列出所有发言者(分页)
sessionize_find_speaker 按姓名搜索演讲者(分页)
sessionize_get_sessions_by_speaker 列出发言者介绍的会议
sessionize_get_sessions 已确认的非服务会话列表(分页)
sessionize_find_session 按标题/描述搜索会话(分页)
sessionize_get_schedule 按日期和时间段获取活动日程

工具名称使用 sessionize_ 前缀(snake_case),以避免与其他MCP服务器一起使用时发生冲突。所有工具均标注为 只读 和 幂等 (@Tool.Annotations),所以MCP客户端知道他们永远不会改变状态。列表工具接受 limit (默认值25,最大值100)和 offset 参数并返回分页元数据。

提示

提示 描述
event_overview 会议概述(发言者/会议次数、主题)
find_speaker_info 关于演讲者的详细信息
sessions_by_topic 查找关于某个主题/技术的会话
conference_schedule 按天和时间列出的完整时间表
speaker_sessions 一位发言者主持的会议
recommend_sessions 基于兴趣的会议建议

MCP的工作原理——架构与概念

简短的入门 为什么 此服务器的形状是这样的。MCP服务器是 不 只是一个API代理-它公开 能力 通过三个不同的基元,每个基元都有自己的 控制模型 (谁决定何时运行)。

体系结构

MCP遵循 host → 客户→ 服务器 模型。主机(AI应用程序)每台服务器运行一个客户端;每个服务器都通过JSON-RPC公开其功能。服务器可以是本地(STDIO)或远程(HTTP)。

graph LR
    subgraph Host["AI Application (Host)"]
        LLM[LLM]
        C[MCP Client]
        LLM --- C
    end
    subgraph Server["Sessionize MCP Server"]
        T[Tools]
        P[Prompts]
        R[Resources]
    end
    API[("Sessionize API")]
    C -- JSON-RPC --> Server
    T <--> API
    R <--> API

三个原语(以及谁控制它们)

这是核心思想: 工具是模型可以调用的函数,而不是数据库行。 按以下方式选择图元 谁 应该驾驶它。

原始 控制模型 目的 类比 在本服务器中
工具 模型受控 --LLM根据对话决定何时调用它们 行动/能力:按需执行操作、计算、查询 函数调用/ POST findSpeaker, getSchedule…--模型 主动搜索 事件
资源 应用程序受控 --主机决定加载什么上下文 数据/上下文:公开由URI 文件寻址的可读内容/ GET (候选人) 例如 sessionize://{eventId}/speakers 作为可附加的上下文
提示 用户控制 --用于显式用户选择(例如斜线命令) 模板/工作流:引导式、可重用的交互 已保存的命令 event_overview, recommend_sessions…

所以“工具必须包含功能,而不仅仅是API调用”是正确的。 一个好的工具映射到 模型想要完成的任务 (findSpeaker by name, getSessionsBySpeaker),具有清晰的描述、类型化的参数和行为提示-即使在后台它碰巧调用了RESTneneneba API。如果你的工具是 “将此原始数据集作为上下文返回” 不涉及任何决定,这是一个 资源不是工具。如果是 “用户触发的预设多步交互”,这是一个 提示.

超越三:更丰富的能力

MCP 1.13也支持服务器↔使工具不止一次调用的客户端交互:

  • 采样 --服务器询问 主人的 LLM生成文本(代理循环)——总是有人在循环中。
  • 启发 --工具在执行过程中暂停,要求用户提供额外的输入。
  • 进度和取消 --长时间运行的工具可以报告进度并被取消。
  • 根 -客户端告诉服务器它可以在哪个文件系统/URI作用域中操作。

此服务器当前使用 工具+提示资源、采样和启发是自然的下一步。


先决条件

到 使用 服务器(推荐路径)

要求 为什么
Node.js 18+ (npx) 或 Docker 启动预构建的服务器
A. 会话事件ID 您要公开其数据的事件(如何获得它)
MCP客户端 克劳德桌面、克劳德代码、光标、风帆、VS代码

这 npx Docker发行版捆绑了一个本机二进制文件-- 不需要JDK 跑步。

到 从源代码构建

要求 版本 注释
Java开发工具包 25 (LTS) 必填:项目使用 maven.compiler.release=25JEP 511模块导入,以及JDK 23+中引入的JVM标志。Java≤21将无法构建。
Maven 捆绑 使用附带的包装器 ./mvnw (Maven 3.9.x)。不要使用全局 mvn.
主轴 / GraalVM 25 可选 仅需要 -Dnative 建筑。 sdk install java 25-graalce 作品。
Docker 可选 只需要构建容器镜像。

⚠️ JAVA_HOME 明白了。 ./mvnw 偏爱 JAVA_HOME 在...之上 java 在你 PATH.如果 JAVA_HOME 指向Java≤21,构建失败 Unrecognized option: --sun-misc-unsafe-memory-access=allow.指向JDK 25:

export JAVA_HOME="$HOME/.sdkman/candidates/java/current"   # e.g. sdkman 25-graalce
./mvnw verify

获取您的活动ID

  1. 登录 会话.
  2. 选择您的活动→ API/嵌入 → 启用 API.
  3. 从URL复制事件ID: https://sessionize.com/api/v2/{EVENT_ID}/view/All.

通过设置 SESSIONIZE_EVENT_ID 环境变量(默认事件)或传递 eventId 直接在任何工具调用中。


安装

克劳德桌面

添加 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或 %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "sessionize": {
      "command": "npx",
      "args": ["-y", "mcp-sessionize"],
      "env": {
        "SESSIONIZE_EVENT_ID": "your-event-id"
      }
    }
  }
}

克劳德代码

claude mcp add sessionize -e SESSIONIZE_EVENT_ID="your-event-id" -- npx -y mcp-sessionize

光标/风帆/VS代码

编辑器 配置文件
光标 ~/.cursor/mcp.json
风帆冲浪 ~/.codeium/windsurf/mcp_config.json
VS代码 code --add-mcp '{"name":"sessionize","command":"npx","args":["-y","mcp-sessionize"],"env":{"SESSIONIZE_EVENT_ID":"your-event-id"}}'

码头工人

图像进入 HTTP模式 (流式HTTP在 /mcp苏格兰和南方能源公司 /mcp/sse):

docker run -i --rm -p 8080:8080 \
  -e SESSIONIZE_EVENT_ID=your-event-id \
  ghcr.io/jeanlopezxyz/mcp-sessionize

配置

环境变量

变量 默认值 适用于 描述
SESSIONIZE_EVENT_ID (空) all 工具调用省略时的默认事件ID eventId.
PORT 8080 HTTP/SSE HTTP传输端口(%sse 配置文件/Docker)。
QUARKUS_MCP_SERVER_STDIO_ENABLED true 全部 false 禁用STDIO(Docker镜像设置了此项)。
QUARKUS_HTTP_CORS_ORIGINS * HTTP/SSE 允许的CORS源。 限制生产。

Sessionize REST客户端使用10秒的连接超时和30秒的读取超时,并强制不使用缓存标头。

运输和概况

服务器从活动的Quarkus配置文件(在中配置)中选择其传输 application.properties):

模式 如何激活 传输 端点
工作室 (默认) 不带配置文件运行 stdio stdin/stdout
HTTP/SSE %sse 个人资料(-Dquarkus.profile=sse)或Docker镜像 流式HTTP+SSE /mcp, /mcp/sse
开发 ./mvnw quarkus:dev HTTP+实时重新加载 /mcp

STDIO注释。 在STDIO模式下,Quarkus已经将控制台日志重定向到 标准错误 并将stdout设置为null,这样日志就不会损坏JSON-RPC流。默认配置文件使用 quarkus.log.level=WARN (错误在调试时保持可见),横幅已禁用。从不写信给 System.out 来自工具/提示代码。


安全

MCP赋予AI模型以下能力 行动,因此安全性是设计的一部分,而不是事后的想法。规范定义了四个 信任与安全原则:

  1. 用户同意和控制 --用户必须了解并批准访问的数据和运行的操作。
  2. 数据隐私 --不要暴露或传输超出所需范围的数据。
  3. 工具安全 --工具描述和结果如下 不可信的 直至核实;总有一个 人在回路 能够拒绝调用。
  4. 取样控制 --如果服务器要求主机的LLM生成(采样),用户将保持控制。

MCP服务器何时需要加固?

这要看情况 运输和暴露,而不仅仅是数据:

场景 曝光 它需要什么
本地STDIO (Claude Desktop/Code) 作为主机的子进程运行,作为您的操作系统用户。没有网络侦听器。 输入验证,无秘密泄露,正常超时。认证通常是不必要的(信任=本地用户)。
远程HTTP/SSE (Docker,共享主机) 监听端口;可通过网络访问 添加身份验证 (OAuth2/承载令牌), 限制CORS (没有 *), 速率限制, TLS/HTTPS,并请求大小限制。

经验法则: 当服务器停止作为本地stdio子级并开始侦听套接字时,它就变成了API并需要API级别的安全性。

服务器端职责(根据MCP规范)

  • 验证所有工具输入 在使用之前(永远不要相信模型中的参数)。
  • 对输出进行消毒/编码;不要泄漏堆栈痕迹或内部错误。
  • 访问控制和权限检查 用于敏感操作和资源URI。
  • 速率限制 调用和设置 超时.
  • 永远不要硬编码秘密 --使用env-vars/a秘密管理器。

如何 这 服务器应用它们

问题 实施
输入验证 sanitizeEventId 在其到达API之前剥离所有非α-姜黄(防止路径/URL注入);已检入所需的参数 validateAndExecute.
最小特权/诚实 所有工具都是 readOnlyHint=true, destructiveHint=false --它们只能读取公共Sessionize数据。
无数据泄露 extractErrorMessage 将HTTP状态代码映射到友好消息,而不是显示原始异常或堆栈跟踪。
代码中没有秘密 唯一的配置是 SESSIONIZE_EVENT_ID (一个环境变量);会话API是公共的,不需要密钥。
超时 REST客户端:10秒连接/30秒读取——挂起的上游无法阻止服务器。

远程(HTTP)部署强化检查表

  • []将身份验证放在前面 /mcp (反向代理或OAuth2)。
  • []替换 QUARKUS_HTTP_CORS_ORIGINS=* 带有明确的允许列表。
  • []添加速率限制(网关或Quarkus过滤器)。
  • []终止TLS(HTTPS)并设置请求大小限制。

使用示例

"Show me all speakers"
"Find speaker John Doe"
"What sessions does Jane Smith have?"
"List all sessions about Kubernetes"
"What's the schedule?"

从源代码构建

# Always export a JDK 25 first (see Prerequisites)
export JAVA_HOME="$HOME/.sdkman/candidates/java/current"

./mvnw verify                 # Build + run tests (this is what CI runs)
./mvnw package                # JVM build → target/quarkus-app/
./mvnw package -Dnative       # Native executable → target/*-runner (needs Mandrel/GraalVM 25)
docker build -t mcp-sessionize .   # Multi-stage native container image

运行本地构建

# JVM
java -jar target/quarkus-app/quarkus-run.jar

# Native binary (STDIO)
./target/mcp-sessionize-*-runner

# Native binary (HTTP/SSE on :8080)
./target/mcp-sessionize-*-runner -Dquarkus.profile=sse

发展

./mvnw quarkus:dev            # Dev mode: HTTP enabled, DEBUG logs, live reload

./mvnw test                   # Unit tests only
./mvnw test -Dtest=SessionizeToolTest                 # Single test class
./mvnw test -Dtest=SessionizeToolTest#testGetSchedule # Single test method

与MCP检查员一起检查

npx @modelcontextprotocol/inspector java -jar target/quarkus-app/quarkus-run.jar

技术栈

  • Java 25 (LTS)+ 心轴25 (本地)
  • Quarkus 3.33.2
  • Quarkus MCP服务器1.13.0 (MCP规范 2025-11-25)--通过管理的版本 quarkus-mcp-server-bom

许可证

阿帕奇-2.0