关于 InfoSlides — put content on a TV or screen
InfoSlides 是面向数字标牌管理者和 AI Agent 的 CLI 与 MCP 服务,可把演示文稿、PDF、图片和实时数据安排到屏幕播放。它支持从创建工作区到配对设备和设置日程的操作。
主要功能
- 01上传 PowerPoint、PDF 和媒体文件
- 02管理幻灯片、播放列表与日程
- 03配对设备并控制屏幕播放
- 04接入实时数据源和推送数据
- 05检查屏幕状态与播放诊断
适用场景
- 01在店铺屏幕展示菜单和营业时间
- 02在办公室屏幕显示实时数据
- 03通过 Agent 配置新屏幕与播放日程
MCP 相关
作为 MCP 服务,InfoSlides 向客户端提供工作区、幻灯片、媒体、设备、日程和实时数据等管理工具。可通过本地程序或托管服务连接。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
InfoSlides:从终端或 Agent 将内容投放到电视
将 PowerPoint、PDF、照片或实时数据流转换成视频流,在任意智能电视上播放。 前台屏幕上的午餐菜单、商店橱窗里的营业时间、学校走廊里的公告栏、酒店大堂里的房间信息、办公室里的实时数据看板。
这个仓库提供 infoslides 二进制程序:一个无需依赖的可执行文件,同时也是供 Claude Code、
Claude Desktop 和 Cursor 等 AI Agent 使用的 开发者 CLI 和 MCP 服务。同一套工具也可作为托管服务运行,地址为
https://infoslides.app/mcp,供 ChatGPT 和 Claude 网页版等助手使用(参见
托管服务)。
有意思的是,create_tenant 无需身份验证。安装了此服务的 Agent 可以从完全没有账号开始,让用户在实体屏幕上播放内容:创建工作区、上传演示文稿、注册显示屏、分配播放计划,再交付视频流链接,全程无需任何人打开管理面板。据我们所知,没有其他数字标牌平台能以这种方式操作。
新工作区将使用永久免费套餐:1 个屏幕、4 个幻灯片、2 位用户、200 MB。无需信用卡,没有试用期限,也不会过期。以下整个流程完全免费,且可以持续运行。
从零开始,让屏幕播放内容
# 1. Install (macOS/Linux; see Install for Windows and MCP clients)
# Version-pinned. Check /releases/latest for the current one.
curl -L https://github.com/arnibj/InfoSlides.MCP/releases/download/v1.8.0/infoslides-v1.8.0-linux-x64.tar.gz | tar xz
# 2. Create a workspace (anonymous; prints an admin API key and saves it to ~/.infoslides)
./infoslides tenant create "Acme Cafe" [email protected] --save
# 3. Grab a ready-made deck from the starter gallery
./infoslides gallery list
./infoslides slideshow clone <gallery-id> --from-gallery
# 4. Register the screen and tell it what to play
./infoslides device create "Reception TV"
./infoslides schedule assign <device-id> <slideshow-id>
# 5. The link to open on the TV
./infoslides stream link <device-id>
在电视的浏览器或 InfoSlides TV app 中打开该 URL。屏幕会按照当前配置的播放方式播放内容。
https://github.com/user-attachments/assets/8da62e05-59f4-4a70-9351-dfa3fd47ce4e
作为 MCP 服务
将其接入 MCP 客户端:
infoslides mcp install --client claude-code # or claude-desktop / cursor
或者安装为 Gemini CLI 扩展或 Antigravity 插件:
# In Gemini CLI
gemini extensions install https://github.com/arnibj/InfoSlides.MCP
# In Antigravity CLI (install agy first, see below), from a clone of this repository
git clone https://github.com/arnibj/InfoSlides.MCP
agy plugin install ./InfoSlides.MCP
Antigravity 从文件夹安装插件,因此需要先复制本仓库;仓库根目录就是插件(plugin.json、mcp_config.json 和 skills/)。请先安装 agy 本身:Windows 上运行
irm https://antigravity.google/cli/install.ps1 | iex,macOS 和 Linux 上运行
curl -fsSL https://antigravity.google/cli/install.sh | bash。这两种方式都会运行本地 infoslides 程序,因此请先安装该程序,并将其添加到 PATH 中。(agy plugin import gemini 只会导入 Gemini CLI 中已安装的扩展,不需要 URL。)
或者添加 Claude 插件(它使用托管服务,无需预先安装):
claude plugin marketplace add arnibj/InfoSlides.MCP
claude plugin install infoslides@infoslides
或者从最新版本
下载 .mcpb bundle,并在任何支持 MCP bundle 的客户端中安装。它包含适用于全部三个平台的二进制文件,启动时无需运行时环境或 API 密钥。
也可以手动配置(stdio 传输):
{
"mcpServers": {
"infoslides": {
"command": "/path/to/infoslides",
"args": ["--mcp"],
"env": { "INFOSLIDES_API_KEY": "isk_admin_..." }
}
}
}
INFOSLIDES_API_KEY 是可选的。不设置该变量,Agent 也可以从头创建工作区。
托管服务
在浏览器或云端运行的助手会连接托管服务,而不是本地二进制文件:
https://infoslides.app/mcp
- 传输方式: 可流式传输的 HTTP。
- 登录: 使用你的 InfoSlides 账户进行 OAuth 身份验证。助手会打开 InfoSlides 授权页面,
你批准后,它便会以你的身份在该工作区中操作。也可使用 bearer
isk_API 密钥。 - 添加位置: 在 ChatGPT、Claude 或 Gemini 中添加为自定义连接器,或通过上方的 Claude 插件添加。
- 断开连接: 在 infoslides.app/settings/connected-apps 撤销任意连接。
对于 ChatGPT、Claude 和其他托管助手,该服务提供一组精选工具,用于日常屏幕操作(Gemini 连接可使用更广泛的工具集):当前播放内容、幻灯片、 日程、滚动字幕、实时数据、设备和 AI Studio 幻灯片。它不包含账单和结账、 工作区创建、API 密钥管理以及从本地路径上传文件等功能;这些功能只适用于你自己的机器或控制面板。每次调用都会使用你自己的 凭据访问 InfoSlides API,服务不会存储任何凭据。它会加载托管版助手技能 (zip)。
Agent 可获取的内容
这些工具涵盖了完整流程:工作区配置(create_tenant,匿名调用,返回管理员密钥)、幻灯片播放列表(包括直接上传 .pptx/.pdf 文件的 upload_pptx)、通过 URL 或直接上传文件添加媒体幻灯片(upload_media)、可见性条件(一天中的时段、星期、日期范围、数据触发器;显示或隐藏,满足全部或任一条件即可)、
编辑正在播放的内容(update_slide 可更改幻灯片时长、隐藏标记和实时数据;
update_slideshow 可更改新闻滚动条、时钟、默认时长和共享设置;delete_slide、
delete_slideshow、replace_slideshow_file;list_sources 可查看新闻滚动条的数据源,
list_adapters、create_source、update_source_settings、delete_source 可管理抓取的数据源;
list_sources 和 get_source_status 会以通俗文字显示每个数据源的运行状况和最近错误,fetch_source_now
可刷新单个数据源,get_source_items 可查看抓取到的内容,test_source_config 可在保存前测试设置;
get_brand_guide、update_brand_guide、preview_brand 和 check_brand 可读取工作区品牌指南、替换其草稿、根据指南生成示例幻灯片并检查幻灯片播放列表是否符合指南,upload_brand_logo 和 list_brand_previews;由人员在“Brand”页面确认指南;
get_source_fields 可查看数据源字段,add_weather_alert_timeline,以及模板维护:list_template_categories、get_template、
update_template、delete_template、clone_template、get_template_usage、
regenerate_template_thumbnail)、文本幻灯片编辑(get_slide_design、update_slide_design,以及通过 search_stock_images 搜索图库照片)、导入 Google Slides
(import_google_slides)、从共享幻灯片播放列表复制页面(list_shared_slideshows、import_slide)、媒体库
(get_upload_limits、list_media、get_media、update_media、delete_media、list_media_folders、create_media_folder、
rename_media_folder、delete_media_folder)、移除屏幕和广播频道(delete_device、
create_broadcast_device)、直接修改排程时段(update_schedule_entry)、审计记录、错误日志和
恢复已删除的幻灯片播放列表(get_audit_trail、get_error_log、restore_slideshow)、关闭和重新开启
团队成员的访问权限(deactivate_member、reactivate_member)、平台新闻(get_platform_version、get_platform_notices)以及帮助
文章、博客和发行说明(search_articles、get_article),
由实时数据推送驱动、可自行更新的模板幻灯片(update_source,以及由
用户自己的系统提供数据的推送数据源:push_data、get_source_status、create_source_key)、设备、排程(带有
AspectMismatch 警告)、播放模式控制(update_slideshow 的 playbackMode 可在渲染后的视频流和实时 HTML/CSS 循环播放之间切换幻灯片播放列表)、无论屏幕处于哪种模式都可使用的播放流链接、在用户面前配对电视(pair_device)、
一次调用即可“在那里播放这个”(play_slideshow_find_device)、定时排程(get_schedule、add_schedule_entry、
delete_schedule_entry)、临时接管播放(create_takeover、list_takeovers、end_takeover)、
播放时长报告(get_slideshow_plays、get_device_plays)、屏幕位置(update_device、可查找某个点附近的 list_devices)、团队(list_team、invite_team_member、revoke_team_invitation、remove_team_member)、
工作区时区和区域设置(update_tenant)、“我们用的是什么套餐?何时续订?”(get_billing)、“这是哪块屏幕?”
(identify_devices)、屏幕上正在播放什么以及屏幕为何黑屏(get_now_slide_png、get_device_diagnosis)、
一分钟内在屏幕上显示照片或视频(show_media_on_device、get_show_status)、重命名屏幕
(update_device)、工作区健康状况汇总和离线提醒邮件(get_workspace_health、
get_offline_alerts、set_workspace_offline_alerts、set_device_offline_alerts)、AI Studio 幻灯片
(make_ai_slide、get_ai_slide_job、insert_ai_slides、start_ai_studio_trial)、保存前预览
模板(preview_new_template)、撤销更改(undo_change)、向 InfoSlides 团队反馈(遇到卡顿时调用 report_issue,工作顺利完成后调用 leave_testimonial;团队可能会将评价置顶到落地页,并注明来自该 Agent)、用于自我验证的 PNG 幻灯片预览、API 密钥(包括限定为仅推送单张幻灯片的密钥),以及可指定套餐和计费周期的 Paddle 结账链接。后端会强制执行所有套餐限制,工具层无法绕过这些限制。
设计自己的实时数据幻灯片:面向 Agent 的模板与推送数据指南介绍了如何编写适合屏幕展示的模板,以及如何连接向其推送数据的系统。
Skill,补足工具本身无法提供的判断力:何时应使用自动更新的幻灯片而非固定幻灯片,如何选择横向或纵向布局,幻灯片应为排队等候的人和路过的人分别展示多久,如何按名称查找屏幕、编辑屏幕上的内容并确认更改已显示在屏幕上(renderStatus),以及如何在对方手持遥控器时,引导他们完成电视端的操作。
InfoSlides 数字标牌助手 Skill涵盖对话方面的内容:它会把用户的话(“关闭大厅里的滚动字幕”“11 点前显示早餐菜单”)转换为按正确顺序调用合适工具,说明应如何回复用户,并包含完整示例、如何自行设计幻灯片,以及何时应报告问题或留下评价。工具名称不变。请访问 https://infoslides.app/skills/infoslides-assistant/SKILL.md 阅读,或下载 infoslides-assistant.zip,将其安装到 Claude 或其他支持加载技能的 Agent 中。
CLI
infoslides login # OAuth in the browser (Google/Microsoft/GitHub)
infoslides tenant create "Acme Cafe" [email protected] --save
infoslides gallery list
infoslides slideshow clone <gallery-id> --from-gallery
infoslides slideshow upload-pptx ./deck.pptx # or ./deck.pdf; or: media upload + slide add-media
infoslides media upload ./logo.png
infoslides slide add-media <slideshow-id> --asset-id <media-id> --duration 8
infoslides slide set-conditions <slide-id> --condition time=08:00-11:00
infoslides slide set-conditions <slide-id> --condition date=2026-12-01..2026-12-26 --mode hide
infoslides slide update <slide-id> --hidden true # or --duration 15; dynamic: --override-data '{"price":"1.990 kr"}'
infoslides slide delete <slide-id>
infoslides slideshow update <slideshow-id> --ticker false --default-duration 15 --clock true
infoslides slideshow replace-file <slideshow-id> ./new-deck.pptx
infoslides slideshow delete <slideshow-id>
infoslides source list # ids for --ticker-source
infoslides template create "Weather" --html ./weather.html --css ./weather.css
infoslides slide add-dynamic <slideshow-id> <template-id>
infoslides source update <slide-id> --data '{"tempC": 12}'
infoslides template create "Queue" --html ./queue.html --css ./queue.css --data-mode push
infoslides slide add-dynamic <slideshow-id> <template-id> --create-push-key # prints sourceId + a push key
infoslides source push <source-id> --data '{"nowServing": "A-142"}'
infoslides source status <source-id>
infoslides device create "Lobby screen" --width 1080 --height 1920
infoslides schedule assign <device-id> <slideshow-id>
infoslides stream link <device-id>
屏幕、日程和工作区:
infoslides device pair --nickname swift-oak-42 --slideshow-id <slideshow-id> # or --qr <url>; --device-id alone prints a code to type on the TV
infoslides device play <slideshow-id> --device-id <device-id> --until 2026-10-01T17:00 # --dry-run to see what would happen
infoslides device list --q lobby --near 64.1466,-21.9426
infoslides device set-location <device-id> 64.1466 -21.9426 --label "Front lobby"
infoslides device identify # each online screen shows its name for ~90 s
infoslides device now <device-id> --output lobby.png # what the screen should show right now
infoslides device diagnose <device-id> # why is it black?
infoslides device show <device-id> --file ./photo.jpg --until 2026-10-01T17:00 # or --url; default 30 minutes
infoslides device show-status <device-id> <media-asset-id> <slideshow-id>
infoslides device update <device-id> --name "Lobby TV" --width 1080 --height 1920
infoslides device offline-alerts <device-id> false # true --quiet-start 22:00 --quiet-end 07:00 for own quiet hours
infoslides device plays <device-id> --from 2026-09-01 --to 2026-09-30 # slideshow plays <slideshow-id> for the other way round
infoslides schedule show <device-id>
infoslides schedule add <device-id> <slideshow-id> 06:00 11:00 --priority 1
infoslides schedule remove <device-id> <entry-id>
infoslides takeover create <slideshow-id> --device <id>,<id> --minutes 30 # or --starts-at/--ends-at
infoslides takeover list --active
infoslides takeover end <takeover-id>
infoslides source adapters
infoslides source create RssFeed "RÚV news" --config '{"feedUrl":"https://..."}' --interval 900
infoslides source edit <source-id> --enabled false
infoslides source delete <source-id>
infoslides source test RssFeed --config '{"feedUrl":"https://..."}' # try settings, nothing is saved
infoslides source fetch <source-id> # refresh now; source status shows the new health
infoslides source items <source-id> --limit 5
infoslides source fields <source-id> # field names and a sample value for mapping
infoslides schedule edit <device-id> <entry-id> --end 15:00
infoslides device delete <device-id> # prints an undo token; device broadcast "Hall" for a channel
infoslides media limits # free space and largest file before a big upload
infoslides media list --type video # media edit/delete, folders, folder-create/-rename/-delete
infoslides template usage <template-id> # template show/edit/clone/delete/categories/thumbnail
infoslides slide design <slide-id> # slide set-design <slide-id> @design.json; slide stock-search lake
infoslides slideshow restore <slideshow-id> # find it with: workspace audit --action SlideshowDeleted
infoslides slideshow shared # then slideshow import-slide <target> <source> <page>
infoslides workspace errors --level Error
infoslides platform version # platform notices, platform search "portrait screen", platform article help <slug>
infoslides team invite [email protected] --role TenantAdmin
infoslides team list # team revoke <invitation-id>, team remove <member-id>
infoslides workspace settings --time-zone Europe/London --locale en-GB
infoslides workspace health
infoslides workspace offline-alerts
infoslides workspace set-offline-alerts --quiet-start 22:00 --quiet-end 07:00 # neither option: alert at any hour
infoslides billing upgrade --plan Starter --period annual
AI Studio、模板预览和撤销:
infoslides ai make <slideshow-id> prompt --prompt "Lunch special: soup and bread 1.990 kr, 11-14"
infoslides ai make <slideshow-id> photo --media-asset-id <media-id> # also: url --url <page>, document --media-asset-id <pdf-id>
infoslides ai status <slideshow-id> <job-id> # poll until Ready, then look at the previews
infoslides ai insert <slideshow-id> <job-id>
infoslides ai trial # the free trial, once per workspace
infoslides template preview @./menu.html --css @./menu.css --sample-data @./sample.json --output menu.png
infoslides undo <token> # --force overwrites a later change
执行会更改内容的命令时,会向 stderr 输出 undo with: infoslides undo <token>;该令牌在 24 小时内有效。当 API 需要你作出选择(NeedsClarification)时,问题及其选项会输出到 stderr;请使用所选 ID 再次运行命令。
全局选项:--api-url、--api-key、--json。凭据优先级:标志 → INFOSLIDES_API_KEY / INFOSLIDES_API_URL → ~/.infoslides/ → 默认值。
更新通知
所有安装方式都不会主动通知你有新版本,因此二进制文件会自行检查:每天最多检查一次,在后台运行,并将结果缓存到 ~/.infoslides/update-check.json。CLI 模式下,通知会输出到 stderr(因此 --json 输出仍然整洁且可通过管道传递);--mcp 模式下,通知会加入服务说明,Agent 可将其转告给用户。
检查不会影响关键路径:你看到的通知来自缓存,刷新结果供下次使用,因此不会拖慢任何命令,离线也不会产生任何影响。设置 INFOSLIDES_NO_UPDATE_CHECK=1 可关闭检查;设置 CI 时也会自动关闭。
安装
从最新版本下载:
| 平台 | 文件 |
|---|---|
| Windows | infoslides-v<version>-win-x64.zip |
| Linux | infoslides-v<version>-linux-x64.tar.gz |
| macOS(Apple Silicon) | infoslides-v<version>-osx-arm64.tar.gz |
| MCP 客户端 | infoslides-mcp-v<version>.mcpb |
每个版本都附带 sha256sums.txt。运行时无需其他依赖:该二进制文件使用 Native AOT 编译。或者,也可以从源代码构建:
dotnet publish src/InfoSlides.Cli -c Release -r linux-x64 # or win-x64 / osx-arm64
链接
- InfoSlides:https://infoslides.app
- 托管的 MCP 服务:
https://infoslides.app/mcp(OAuth;参见托管服务) - REST API 参考:https://infoslides.app/docs/api(这些工具封装的
/v1接口) - AI Agent 指南:https://infoslides.app/agents.md
- 博客:https://infoslides.app/blog(提供有关模板、实时数据、屏幕设计和 Agent 的指南)
- 数字标牌助手 Skill:https://infoslides.app/skills/infoslides-assistant/SKILL.md(zip)
仓库布局
| 路径 | 用途 |
|---|---|
SKILL.md | Skill:与工具配套的标牌判断。 |
API-CONTRACT.md | InfoSlides 后端实现的、面向 Agent 的 REST 契约。 |
BACKEND-CHANGES.md | InfoSlides 端工作的检查清单(TenantApiKeys 表、访问控制等)。 |
docs/PUBLISHING.md | 发布、MCPB 打包和 MCP 注册表发布操作手册。 |
mcpb/ | MCPB 捆绑包清单模板。 |
src/InfoSlides.Core | 共享 API 客户端、模型、AOT JSON 上下文、配置和身份验证。 |
src/InfoSlides.Mcp.Tools | MCP 工具,由本地服务和托管服务共用。 |
src/InfoSlides.Cli | infoslides 可执行文件:CLI 动词和本地(stdio)MCP 服务。 |
src/InfoSlides.McpServer | 位于 infoslides.app/mcp 的托管 MCP 服务(可流式传输的 HTTP、OAuth)。 |
skills/ | Digital Signage Assistant 技能,本地变体。 |
plugins/claude/ | Claude 插件(托管服务 + 托管技能变体)。 |
gemini-extension.json, GEMINI.md | Gemini CLI 扩展。 |
plugin.json, mcp_config.json | Antigravity 插件(仓库根目录即为插件)。 |
deploy/ | 托管服务部署:systemd 单元、nginx、部署脚本。 |
tests/ | 单元测试、端到端 MCP stdio 冒烟测试和托管服务测试。 |
开发
dotnet build # AOT analyzers run as errors; keep it warning-free
dotnet test # unit + MCP end-to-end tests (no network needed)
MCP SDK 工具通过 AOT 安全的 WithTools<T>() 路径注册;每种线缆类型都必须列在 InfoSlidesJsonContext 中(缺少任何类型都会导致测试失败)。在 --mcp 模式下,stdout 用于协议通信,因此日志只能写入 stderr。
工具描述是触发文本,而非文档:模型会将其与用户刚才所说的内容进行匹配,因此描述应以具体情境开头(“登记实体屏幕:接待处的电视、柜台上方的菜单牌”),而不是 API 操作。McpStdioSmokeTests 中的测试会固定这些用语,防止它们悄然退化。
隐私政策
InfoSlides 处理演示文稿内容、媒体资源和屏幕设备元数据,仅用于向授权显示设备渲染和传送数字标牌流。InfoSlides 不会出售用户数据、使用用户内容训练基础 AI 模型,也不会为了第三方广告而跟踪用户。
有关 OAuth 身份验证安全、数据保留和数据主体权利的完整详情,请阅读我们的隐私政策。
许可证
MIT。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。