Token导航 LogoToken导航TokenDH.com
Pulumi Events logo
AI代理未说明官方级别未说明来源级核验

Pulumi Events

MCP Server

Pulumi Events MCP是一个用于通过AI助手(如Claude)管理Meetup.com和Luma上的活动的MCP服务器,提供事件搜索、群组管理、事件创建和发布等功能。

工具数

22

提示词数

0

GitHub Stars

1

资源数

0
API集成PythonClaudeClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

dirien

提供方

dirien

最后核验

2026/5/17 20:22

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

Pulumi活动MCP

MCP服务器,用于通过Claude等人工智能助手管理Meetup.com和Luma上的事件。

建于 FastMCP 3.x,它公开了Meetup的GraphQL API和Luma的REST API作为MCP工具和资源,因此LLM可以搜索事件、管理组、创建和发布事件等等。

特性

  • 22工具 跨两个平台(Meetup+Luma),按平台和域标记
  • 6资源 用于只读查找(用户配置文件、组/事件/网络详细信息)
  • 封面图片上传 --在创建/更新事件时传递本地文件路径;服务器自动处理CDN上传(Luma主持URL,Meetup两步照片上传)
  • 所有列表工具自动分页——单个工具调用返回所有结果
  • Meetup:用于无头服务器到服务器访问的JWT身份验证(无需浏览器),支持OAuth2回退
  • 使用成员元数据(角色、参加的活动、组数)进行Meetup Pro网络搜索
  • Luma:API密钥认证
  • 无状态HTTP传输——服务器重启时没有过时的会话问题
  • 提供商架构,便于添加新平台

中间件

服务器使用FastMCP的中间件堆栈来提高可靠性和可观察性:

中间件用途
ErrorHandlingMiddleware将原始异常转换为正确的MCP错误代码,一致地记录错误
RetryMiddleware在瞬态网络故障时,采用指数回退自动重试(ConnectionError, TimeoutError)
ResponseCachingMiddleware只读工具(列表、搜索、获取)上的5分钟TTL缓存——突变永远不会被缓存

工具元数据

所有工具都包含FastMCP元数据,以实现更好的LLM集成:

  • 标签 --每个工具都按平台标记(meetup, luma)和域(events, groups, members等等)用于发现和过滤
  • 超时 --支持上传的工具和所有自动分页列表工具超时120秒,以防止在慢速网络上挂起
  • 输出模式 --关键工具声明其响应结构,以便LLM客户端知道预期的字段
  • 注释 --只读工具标记为 readOnlyHint,幂等工具 idempotentHint

快速启动

请参阅 入门指南 有关完整的设置说明。

云(已部署)

服务器在CloudFront后面的AWS ECS Fargate上运行。直接连接克劳德桌面或克劳德代码:

{
  "mcpServers": {
    "pulumi-events": {
      "command": "npx",
      "args": ["mcp-remote", "https:///mcp"]
    }
  }
}

Google OAuth处理MCP身份验证。Meetup在服务器启动时通过JWT自动进行身份验证。CloudFront域由输出 pulumi stack output cloudfront_url 部署后。

本地开发

# Prerequisites: Python 3.12+, uv, Pulumi CLI (logged in)
git clone https://github.com/dirien/pulumi-events.git
cd pulumi-events
uv sync

# Start the server (credentials injected via Pulumi ESC)
pulumi env run ediri/pulumi-idp/auth -- uv run pulumi-events

然后将Claude Code指向 http://127.0.0.1:8080/mcp.

工具

聚会

工具标签描述
list_platformsplatform列出所有具有身份验证状态的已配置平台
meetup_loginmeetup, auth启动Meetup OAuth2登录流程
meetup_get_eventmeetup, events按ID获取Meetup活动的完整详细信息
meetup_list_group_eventsmeetup, events使用状态筛选器列出组的事件(包括草稿)
meetup_search_eventsmeetup, events, search使用过滤器搜索事件(需要纬度/经度、日期、类型)
meetup_search_groupsmeetup, groups, search按关键字和位置搜索组(需要纬度/经度)
meetup_list_my_groupsmeetup, groups列出您所属的所有组
meetup_create_eventmeetup, events创建事件(默认为DRAFT)。支持 featured_image_path 用于上传封面照片
meetup_edit_eventmeetup, events编辑现有事件。支持 featured_image_path 用于上传封面照片
meetup_event_actionmeetup, events删除、发布、宣布或管理RSVP
meetup_network_searchmeetup, network, search搜索Pro网络中的事件、组或成员
meetup_list_group_membersmeetup, members列出具有角色和加入日期的组成员
meetup_get_membermeetup, members获取组中特定成员的详细信息
meetup_find_membermeetup, members在所有组中查找成员(跨组查找)
meetup_create_venuemeetup, venues为活动创建场地

老的

工具标签描述
luma_list_eventsluma, events列出Luma日历中的事件
luma_get_eventluma, events通过API ID获取Luma事件的全部详细信息
luma_create_eventluma, events创建Luma事件。支持 cover_image_path 用于上传封面图片
luma_update_eventluma, events更新Luma事件。支持 cover_image_path 用于上传封面图片
luma_cancel_eventluma, events取消Luma活动
luma_list_peopleluma, people列出Luma日历中的所有人
luma_list_guestsluma, guests列出Luma活动的客人

图片上传

这两个平台都通过其创建/更新工具支持事件封面图像:

  • 老的:通行证 cover_image_path (本地文件路径)到 luma_create_eventluma_update_event服务器通过预签名的URL上传到Luma的CDN,并设置 cover_url 自动。
  • 聚会:通行证 featured_image_path (本地文件路径)到 meetup_create_eventmeetup_edit_event服务器通过Meetup上传 createGroupEventPhoto 突变并设置 featuredPhotoId。对于创建,首先创建活动,然后上传照片并通过编辑附加(因为Meetup的 CreateEventInput 不支持 featuredPhotoId).

支持的图像格式:JPEG、PNG、GIF、WebP、SVG、AVIF。

跨平台:遇见Luma

当将活动从Meetup复制到Luma时,LLM应查找场地的 谷歌地图地点ID 并将其作为 geo_address_json:

// Recommended — Google Maps place ID (most reliable)
{"type": "google", "place_id": "ChIJJzpTdyB0nkcRblzKCp3kxeQ"}

Luma会自动从位置ID解析完整的地址、坐标和地图引脚。不要传递未经处理的Meetup会场对象——它们使用不兼容的格式。服务器也会删除无效 type 将服务器端字段作为安全网。

资源

URI描述
meetup://self经过身份验证的Meetup用户资料
meetup://group/{urlname}按URL名称列出的聚会组详细信息
meetup://event/{event_id}按ID列出的聚会活动详细信息
meetup://network/{urlname}Meetup Pro网络信息
luma://self经过身份验证的Luma用户资料
luma://event/{event_id}API ID的Luma事件详细信息

配置

所有设置都是通过环境变量加载的 PULUMI_EVENTS_ 前缀:

变量默认值描述
PULUMI_EVENTS_MEETUP_CLIENT_ID--会见OAuth客户端ID
PULUMI_EVENTS_LUMA_API_KEY-Luma API密钥(需要Luma Plus)
PULUMI_EVENTS_SERVER_HOST127.0.0.1服务器绑定地址
PULUMI_EVENTS_SERVER_PORT8080服务器端口
PULUMI_EVENTS_TOKEN_CACHE_DIR~/.config/pulumi-events令牌缓存目录
PULUMI_EVENTS_AUTH_TOKEN--MCP端点身份验证的承载令牌(可选)
PULUMI_EVENTS_AUTO_OPEN_BROWSERfalse自动打开OAuth登录浏览器
PULUMI_EVENTS_MEETUP_PRO_NETWORK_URLNAMEpugs默认Meetup Pro网络URL名称
PULUMI_EVENTS_BASE_URL--公共URL覆盖(例如CloudFront域)
PULUMI_EVENTS_MEETUP_JWT_SIGNING_KEY--用于Meetup JWT身份验证的RSA私钥PEM
PULUMI_EVENTS_MEETUP_JWT_KEY_ID--聚会签名密钥ID(儿童)
PULUMI_EVENTS_MEETUP_MEMBER_ID--JWT身份验证的Meetup成员ID(子声明)
PULUMI_EVENTS_MEETUP_TOKEN_BACKENDfile令牌后端: fileenv
PULUMI_EVENTS_GOOGLE_CLIENT_ID--谷歌OAuth客户端ID(用于MCP身份验证)
PULUMI_EVENTS_GOOGLE_CLIENT_SECRET--谷歌OAuth客户端机密

认证

MCP端点支持可选的承载令牌身份验证。当 PULUMI_EVENTS_AUTH_TOKEN 如果已设置,所有MCP请求都必须包含 Authorization: Bearer 头球未设置时,服务器将在没有身份验证的情况下运行(本地开发的默认设置)。

要启用:

export PULUMI_EVENTS_AUTH_TOKEN="your-secret-token"

然后,MCP客户端必须在 Authorization 头球Claude代码配置示例:

{
  "mcpServers": {
    "pulumi-events": {
      "type": "streamable-http",
      "url": "http://127.0.0.1:8080/mcp",
      "headers": {
        "Authorization": "Bearer your-secret-token"
      }
    }
  }
}

健康(/health)OAuth回调(/auth/meetup/callback)路由不受MCP身份验证的影响。

项目结构

src/pulumi_events/
├── server.py              # FastMCP instance, lifespan, middleware, custom routes
├── settings.py            # Pydantic Settings configuration
├── exceptions.py          # Exception hierarchy
├── utils.py               # Shared utilities (image MIME type detection)
├── auth/
│   ├── backends.py        # Pluggable token backends (File, Env)
│   ├── jwt_auth.py        # Meetup JWT auth (headless, server-to-server)
│   ├── oauth.py           # OAuth2 flow helpers (Meetup)
│   └── token_store.py     # Token persistence + auto-refresh
├── providers/
│   ├── base.py            # EventProvider protocol + capabilities
│   ├── registry.py        # Provider registry
│   ├── meetup/
│   │   ├── client.py      # GraphQL client with auto token refresh + binary upload
│   │   ├── provider.py    # MeetupProvider implementation + photo upload
│   │   ├── queries.py     # GraphQL query/mutation strings
│   │   └── models.py      # Pydantic response models
│   └── luma/
│       ├── client.py      # REST client for Luma public API + image upload
│       └── provider.py    # LumaProvider implementation
├── tools/
│   ├── _deps.py           # Shared dependency factories
│   ├── platform_tools.py  # list_platforms, meetup_login
│   ├── event_tools.py     # Meetup event mutations (with image upload)
│   ├── group_tools.py     # Meetup group tools
│   ├── member_tools.py    # Meetup member tools
│   ├── search_tools.py    # Meetup search tools
│   ├── venue_tools.py     # Meetup venue tools
│   └── luma_tools.py      # Luma event + guest tools (with image upload)
└── resources/
    ├── meetup_resources.py
    └── luma_resources.py

部署

服务器通过Pulumi部署到AWS ECS Fargate。基础设施代码存在于 deploy/.

deploy/
├── __main__.py       # Pulumi program (VPC, ECR, ECS, ALB, CloudFront, Secrets Manager)
├── Pulumi.yaml       # Project config (org: pulumi, toolchain: uv)
├── Pulumi.dev.yaml   # Stack config (ESC environments: marketing/aws-auth, marketing/pulumi-events)
├── pyproject.toml    # Pulumi SDK dependencies
└── uv.lock

架构:CloudFront(HTTPS)→ ALB(HTTP)→ ECS Fargate(端口8080)

Meetup在每次启动容器时都会通过JWT进行无头身份验证。机密存储在AWS Secrets Manager中,并通过ECS任务定义注入。所有配置均来自Pulumi ESC。

cd deploy
pulumi up    # deploy or update
pulumi logs  # tail container logs

发展

make help       # Show all targets
make check      # Lint + format check
make format     # Auto-format
make test       # Run tests
make run        # Start the server

许可证

麻省理工学院

目录标签

目录标签

API集成PythonClaude活动管理本地部署AI助手MeetupLumaGraphQLAPIRESTAPI

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

oauth

工具数量(toolCount,工具数)

22

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明oauth部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP