原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。使用 Google 登录即可撰写评价。原型 · 每 30 分钟更新
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

PositionGuard

作者:positionguard版本 1.0.0i★ 1 (星标属于其他仓库)i在云端运行
注册名称com.positionguardai/positionguard

安装方法

What it does

Ask who in your groups is at an area like home or school. Members opt in. Never coordinates.

  • Connects 在云端运行
  • Account or key Sign in to the service when you connect (OAuth)
  • Category 游戏、体育、美食与学习

安装

选择你使用的 AI 应用,然后复制设置。

通过 4/5 项检查 · 你的提问会经过开发者的服务器(mcp.positionguardai.com) · ✓ 命令已检查 2026年11月13日

第一步:你用哪个 AI?

选择你用的应用,步骤会显示在下方。

可连接 Claude · 约 2 分钟

不需要密钥,不用安装程序 · 在 claude.ai 或桌面应用设置一次,即可在聊天中使用 · 免费账户可添加 1 个 · Team/Enterprise 方案由所有者(Owner)添加

  1. 打开 Claude 的 Connectors 页面

    CustomizeConnectors

    CustomizeConnectors1Add2https://…3Add4
  2. 点击“Add” → “Custom” → “Web”,填写这 2 项

    把这里的内容复制到 Claude 中同名的输入框,然后点击 Continue

    Name · 名称PositionGuard
    Remote MCP server URL · 地址https://mcp.positionguardai.com/mcp

    在 Claude 检测到的登录设置页点击 Continue · Authentication 按作者说明选择(Sign in now、Sign in when needed 或 No sign in),然后点击 Add

  3. 在聊天中开启

    +ConnectorsPositionGuard

  4. 试一试

    用 PositionGuard 告诉我你能帮我做什么,然后做一件给我看

    ✓ 如果 Claude 说正在使用 PositionGuard,或回答中出现 PositionGuard 的工具名称,就表示连接成功

菜单名称已于 2026年11月11日 对照 Anthropic 帮助页面核实 · 你的界面可能因版本略有不同

能否连接 ChatGPT 取决于方案

完整 MCP:网页版 ChatGPT Business、Enterprise 或 Edu · Pro:以读取/获取权限连接,修改数据的工具可能用不了 · Plus:官方文档尚未确认,如果在插件页看到添加自定义 MCP 的选项可以试试 · 仅限网页

  1. 在网页版 ChatGPT 打开添加 MCP 的页面

    Plugins+Add custom MCP server

    ChatGPTPlugins1+2https://…3Create4
  2. 填写名称和地址

    输入名称,在 Connection 下粘贴地址,勾选风险提示,然后点击 Create as a plugin

    Name · 名称PositionGuard
    Connection · 地址https://mcp.positionguardai.com/mcp
  3. 在聊天中选择 PositionGuard

    开启新聊天,输入前先从插件列表中选择 PositionGuard

  4. 试一试

    用 PositionGuard 告诉我你能帮我做什么,然后做一件给我看

    ✓ 如果 ChatGPT 说正在使用 PositionGuard,或回答中出现 PositionGuard 的工具名称,就表示连接成功

菜单名称已于 2026年11月11日 对照 OpenAI 帮助页面核实 · 你的界面可能因版本略有不同

可连接 Claude Code · 约 2 分钟

不需要密钥,不用安装程序

  1. 打开终端

    Mac:按 Command+空格,输入 Terminal · Windows:打开 PowerShell

  2. 粘贴这条命令并按 Enter

    claude mcp add --transport http --scope user positionguard https://mcp.positionguardai.com/mcp
  3. 在 Claude Code 中输入 /mcp

    应能看到 PositionGuard 在列表中并显示已连接

  4. 试一试

    用 PositionGuard 告诉我你能帮我做什么,然后做一件给我看

    ✓ 如果 Claude Code 说正在使用 PositionGuard,或回答中出现 PositionGuard 的工具名称,就表示连接成功

菜单名称已于 2026年11月11日 对照 Anthropic 帮助页面核实 · 你的界面可能因版本略有不同

可连接 Cursor · 约 2 分钟

不需要密钥,不用安装程序

  1. 点击这个按钮打开 Cursor

    在 Cursor 中打开

    Cursor 会请你确认安装,点击 Install

  2. 在 Cursor 中以 Agent 模式打开 AI 聊天

  3. 试一试

    用 PositionGuard 告诉我你能帮我做什么,然后做一件给我看

    ✓ 如果 Cursor 说正在使用 PositionGuard,或回答中出现 PositionGuard 的工具名称,就表示连接成功

菜单名称已于 2026年11月11日 对照 Cursor 帮助页面核实 · 你的界面可能因版本略有不同

可连接 VS Code · 约 2 分钟

不需要密钥,不用安装程序

  1. 点击这个按钮打开 VS Code

    在 VS Code 中打开

    VS Code 会请你确认安装,点击 Install

  2. 在 VS Code 中以 Agent 模式打开 AI 聊天

  3. 试一试

    用 PositionGuard 告诉我你能帮我做什么,然后做一件给我看

    ✓ 如果 VS Code 说正在使用 PositionGuard,或回答中出现 PositionGuard 的工具名称,就表示连接成功

菜单名称已于 2026年11月11日 对照 VS Code 帮助页面核实 · 你的界面可能因版本略有不同

其他支持 MCP 的应用(如 Windsurf、Zed、Gemini CLI)添加方式各不相同,请在应用列表中查看

查看所有支持 MCP 的应用 →

通过网页连接的应用使用的地址

地址https://mcp.positionguardai.com/mcp

JSON 设置在下方“开发者专用”中

卡住了?问问正在用 PositionGuard 的人💬 讨论 →
开发者专用:终端命令和 JSON 设置

通过网页连接

Claude Code

claude mcp add --transport http --scope user positionguard https://mcp.positionguardai.com/mcp

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "positionguard": {
      "url": "https://mcp.positionguardai.com/mcp"
    }
  }
}

VS Code (mcp.json)

{
  "servers": {
    "positionguard": {
      "type": "http",
      "url": "https://mcp.positionguardai.com/mcp"
    }
  }
}

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

一览

GitHub 星标i
1 (星标属于其他仓库)
此条目指向他人的仓库,因此星标不计入排名
每周下载量i
不在 npm/PyPI 上
已验证域名
✓ positionguardai.com
连接方式
在云端运行
传输方式
streamable-http
最新版本i
1.0.0
发布到注册中心i
2026年10月16日
代码最后更新i
2026年10月21日
作者
positionguard
注册状态
活跃

哪些应用可以使用它

依据这个服务器的连接方式和各应用自己的文档,检查于 2026年11月10日。

通过互联网连接,适用于

ClaudeChatGPTGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatOpen WebUIRaycast

全部应用及其优缺点 →

它能做什么

服务器要求先登录,才会列出它的工具。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月13日

  • ! 注意

    作者与仓库一致

    发布者(positionguardai.com)不是仓库所有者(positionguard);可能是其他人代为上架的

  • ✓ 通过

    仍在维护

    代码最后更新于23天前

  • ✓ 通过

    有许可证

    使用 MIT

  • ✓ 通过

    端点有响应

    在 119 毫秒内响应(HTTP 401)

  • ✓ 通过

    使用 OAuth 登录

    声明支持 OAuth 登录,你的 AI 应用可以带你去登录

  • … 尚未检查

    工具描述中没有隐藏指令

    尚未检查;我们会在检查端点时读取工具列表

讨论

提问、分享技巧或报告无法使用。按“有帮助”数量排序。

还没有帖子,欢迎第一个提问或分享。

此处内容由用户撰写,不代表 PopNx 团队。

使用 Google 登录后发帖

用户评价

还没有评价

用 Google 登录后写评价

与“游戏、体育、美食与学习”中的其他服务器比较i

  • 星标数多于此分类中其他 1471 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 1471 个服务器的 48% 更新
  • 基础检查结果等于或优于此分类中其他 1471 个服务器的 65%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

PositionGuard 安全吗?

它在 5 项适用的基础检查中通过了 4 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。

它在我的电脑上运行还是在云端?

它在作者的云端运行。通过互联网连接,无需安装,但你发送的内容会经过作者的服务器。

它还在维护吗?

GitHub 仓库最后更新于23天前,最新版本(1.0.0)于28天前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,因此也能用于接受远程 MCP 的应用,例如网页版 ChatGPT(Business 及以上为完整 MCP;Pro 为只读)。

有什么可以替代它?

同一分类中有:Honcho, ShipSwift, Pm Claude Skills

同类别的其他选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Honcho

Memory that reasons: continual learning for stateful agents. Better context, fewer tokens.

作者:plastic-labs广泛使用★ 80853个月前更新

在云端运行

ShipSwift

40+ production-ready SwiftUI recipes for building full-stack iOS apps via MCP.

作者:signerlabs广泛使用★ 32709个月前更新

在云端运行

Pm Claude Skills

1310 professional Agent Skills + workflow recipes — searchable & fetchable over MCP.

作者:mohitagw15856广泛使用↓ 2542/周★ 154121天前更新

在你的电脑上运行

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

positionguard-mcp

An MCP server that lets an AI assistant ask about PositionGuard presence: *is Earl at the skatepark*, *who is at home*, *how many people are at the club*. It answers only what each member has agreed to share with assistants, and says unknown when they haven't.

The server is a deterministic client of the public REST API. It holds one API key, calls three read-only endpoints, and maps what comes back into a small, explicit vocabulary. There is no model inside it and no privileged access: every guarantee is enforced at api.positionguardai.com, where the key is checked and the consent gate runs. This server cannot widen what the API returns. It can only ask.

What it asks for, and what it doesn't

This server gives the assistant less than it could, on purpose, and you can read exactly what.

  • Three scopes, not four. Grant presence:read, counts:read and groups:read. Do not grant areas:read: it unlocks /groups/{id}/areas, which returns area center coordinates, and this server never calls it. Area names and IDs come from /area-counts, which is coordinate-free by design. The client refuses to fetch /areas even if a future edit asked it to, and a test checks the refusal.
  • An Assistant key, not an Integration key. Create the key in the developer portal with type Assistant. Members are visible to an Assistant key only if they have turned on *Let AI agents see whether I'm at an area*; otherwise the key gets *unknown*. An Integration key works mechanically, and bypasses that consent gate. That is the key holder's choice to make; the reference configuration does not demonstrate it.
  • Never log a body, a key, or a name. Log lines carry paths, HTTP statuses, item counts, durations, tool names and the status a tool returned. The key appears once at startup, as its first 16 characters, the same prefix the portal shows.
  • `unknown` is not "away". A member who has not opted in, who is in global Ghost, who paused sharing, or whose phone has not reported in a while all look identical on the wire, and all map to unknown; the first three are captured in test/fixtures/ and asserted identical. The same holds per area: a member who is at an area but has hidden that one area from assistants is simply not listed there, and that absence is unknown too, never "not there". A member who joined a public group in Ghost mode is not on that roster at all, and one who joined anonymously is listed as "Anonymous"; the API does that before this server sees the roster. The tool descriptions tell the model, in so many words, that unknown means it doesn't know. A stale last-known position is never returned as a current location: it is unknown, or last_known_at_area with its age (below); counts include stale members and say so.
  • No caching. The API caches for 15 seconds. A second cache would be a second place for a withdrawn consent to lag.
  • Read-only. No write tools, no coordinates, no messages, no history. Every tool is annotated readOnlyHint.

Tools

Every answer is JSON with a status field. ok means the question was answered. unknown means it was not, and reason says why in one word. API failures are MCP tool errors carrying the HTTP status in one sentence, and are never retried.

ToolScopeAnswers
list_groupsgroups:read{status, groups: [{group_id, name, group_type}]}
list_areascounts:read{status, areas: [{area_id, name, group_id, group_name}]} — names only, no counts, no geometry
where_is_memberpresence:read{status: "at_area", area, inside_areas?, since?} \{status: "last_known_at_area", area, inside_areas?, since?, last_confirmed_seconds_ago, note} \{status: "not_at_area"} \{status: "unknown", reason}
who_is_at_areapresence:read{status, area, confirmed: [nickname…], last_known: [{nickname, last_confirmed_seconds_ago}…], members, last_known_note?, undisclosed_note?, count_note?} — disclosed members only
count_members_at_areacounts:read{status, member_count, stale_count, undisclosed_count, note}

where_is_member looks a nickname up case-insensitively, in one group or across all of them. Its reason is not_disclosed, stale, or no_such_member (which is an answer, not an error, so the model doesn't invent one). who_is_at_area adds count_note ("N counted at this area, M listed") whenever the server counts more members at the area than the answer lists, where N is member_count + undisclosed_count: a public group serves no row for a Ghost-joined member and, above its member limit, no row but the caller's own, and a member can be present but not disclosed to assistants at that area, so the list is never presented as complete when the count says otherwise. When members are undisclosed the note says how many, and "do not report the named list as complete". member_count is a floor when undisclosed_count or stale_count is non-zero, and the note says to report it as "at least N". When the API provides no count at all (archived areas), the answer is unknown with reason count_unavailable, never zero.

Areas inside areas. A group can have a home inside a city. The API lists every area of the group a member is inside, innermost first (inside_areas), and where_is_member answers with the innermost as area and the whole list beside it, so "is Fred in Los Angeles" can be answered from the list. who_is_at_area matches the area asked about against that list, so someone at home is also named for the city. Members choose per area what assistants may see: one who shares Home and not Los Angeles comes back with a list of Home alone, and nothing marks the omission. An area missing from `inside_areas` is therefore not evidence the member is outside it — the tool description says so — and the only trace of the withholding is the city's undisclosed_count, which is why count_note reads it. since is given only when the area named is the one the API timed the entry for. Against a server that doesn't send inside_areas, the single current_area answers as before.

Freshness and last-known answers. A PositionGuard server can hold a member at the area they were last confirmed in while their phone is silent, and marks those rows position_fresh: false with the position's age. where_is_member answers them as last_known_at_area, with last_confirmed_seconds_ago and a note ("Last confirmed at Lake House 10 h ago; no newer position"), never as at_area. who_is_at_area lists them under last_known, never under confirmed, and count_members_at_area's note says how many of the count are not recently confirmed. The tool descriptions tell the model to relay a last-known answer with its age, never as current presence. since is always when the member entered the area, not when they were last confirmed. Against a server that doesn't send position_fresh, answers are what they were in 0.1.0.

How the wire maps to status is written out in src/core/mapping.ts and tested against captured responses in test/fixtures/ before any model sees the server.

Configuration

EnvRequiredDefault
POSITIONGUARD_API_KEYyes— must start with pg_live_; the server refuses to start otherwise
POSITIONGUARD_API_BASEnohttps://api.positionguardai.com/api/v1
TRANSPORTnohttp (streamable HTTP + SSE) or stdio
PORTno8788 (HTTP transports)
HOSTno0.0.0.0 (HTTP transports); use 127.0.0.1 outside a container

On startup the server calls GET /groups once. A 401 or 403 exits with a message naming the fix. An empty group list starts with a warning. Every tool call re-checks the key, so a briefly unreachable API at startup is logged and not fatal.

Transports

One code path, three ways in. There is no authentication on the HTTP transports in this version: run the server on a private docker network or on localhost, and do not expose it.

PathTransportFor
/mcpStreamable HTTP, statelessOpen WebUI
/sse (+ /messages)SSEHome Assistant's mcp integration, which is SSE-only
stdio (TRANSPORT=stdio)stdioClaude Desktop and other launchers
/healthz—docker healthcheck; returns {"ok":true}

Setups

Each setup is marked tested or untested. Only tested setups describe behaviour that has actually been observed with this server.

1. Open WebUI + Anthropic + this server, in containers — tested

docker-compose.example.yml runs Open WebUI and this server on one private network with no port published for the server. Put WEBUI_SECRET_KEY and POSITIONGUARD_API_KEY in a .env file (gitignored), then:

cp docker-compose.example.yml docker-compose.yml

docker compose up -d

In Open WebUI: Admin → Settings → Connections, add an OpenAI-compatible connection with base URL https://api.anthropic.com/v1 and your Anthropic key. Admin → Settings → External Tools, add an MCP server of type Streamable HTTP at http://positionguard-mcp:8788/mcp with auth None (Bearer with an empty key sends an empty header, which servers reject). Open WebUI has supported Streamable HTTP MCP servers natively since 0.6.31.

Disclosure for this and any other cloud-model setup: presence you've chosen to disclose is sent to the model provider to produce answers.

Verified against the production API with an Assistant key. A member who has turned the setting on returns their area; the same member with it off returns unknown, not "away". A count with an undisclosed or stale member is reported as a floor.

2. Claude Desktop, stdio — tested

Build once (npm install && npm run build), then add to Claude Desktop's claude_desktop_config.json:

{

"mcpServers": { "positionguard": { "command": "node", "args": ["/absolute/path/to/positionguard-mcp/dist/index.js"], "env": { "POSITIONGUARD_API_KEY": "pg_live_…", "TRANSPORT": "stdio" } } } }

When the package is published, "command": "npx", "args": ["-y", "positionguard-mcp"] replaces the path. Logs go to stderr; stdout is the protocol.

3. Home Assistant Assist + mcp integration + this server — untested

Run the server with the HTTP transport where Home Assistant can reach it. Add the Model Context Protocol integration and give it the SSE URL, http:// :8788/sse. The tools appear under the conversation agent; enable them for the agent (Anthropic, OpenAI, Ollama, …) you use with Assist. Home Assistant's client is SSE-only and offers OAuth or nothing for authentication, so this server's no-auth SSE endpoint is used as-is, on a network you control.

4. Home Assistant Assist + Ollama + this server, fully local — untested

As 3, with Ollama as the conversation agent. No presence leaves your network.

5. Open WebUI + Ollama, fully local — untested

As 1, with Ollama as the model connection instead of Anthropic. No presence leaves your network.

Rate limits and errors

The API rate-limits per key. A 429 is surfaced to the model as a tool error that says how long to wait (from Retry-After), and the server does not retry. The same holds for every other non-2xx status: one request, one answer or one error, nothing in between.

Development

npm install

npm test # builds, then unit + end-to-end tests over all three transports npm run dev # runs from source (tsx)

src/core/ holds the tools, the wire-to-status mapping and the API client. It imports nothing Node-specific — fetch and AbortSignal only — and a test enforces that, so the same core can run in a Cloudflare Worker with the SDK's web-standard transport when a hosted version is wanted. src/transports/ is the Node side: streamable HTTP, S

只显示了开头部分;其余内容请在仓库中阅读