World Monitor
Real-time global intelligence on conflict, markets, energy, trade, shipping and cyber. 102 tools.
제작자가 쓴 설명(영어 원문)
Read your own ourpr running history in an AI agent, and put a plan on the week ahead.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
OURPR_TOKEN비밀로 표시된 값은 내 계정의 열쇠예요. 절대 다른 사람과 공유하거나 채팅에 붙여 넣지 마세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"ourpr": {
"command": "npx",
"args": [
"-y",
"ourpr-mcp-server"
],
"env": {
"OURPR_TOKEN": "your-value"
}
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add ourpr --env OURPR_TOKEN=your-value -- npx -y ourpr-mcp-server실행하기 전에 빈 값을 채워 주세요.
프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"ourpr": {
"command": "npx",
"args": [
"-y",
"ourpr-mcp-server"
],
"env": {
"OURPR_TOKEN": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"ourpr": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"ourpr-mcp-server"
],
"env": {
"OURPR_TOKEN": "your-value"
}
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
이 서버의 연결 방식과 각 앱의 공식 문서를 바탕으로 했어요. 2026년 11월 10일 확인.
내 컴퓨터에서 실행하는 앱
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 10일 점검
레지스트리 이름이 GitHub 계정 joeyaflores 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
코드 마지막 변경: 39일 전
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 2개 중 2개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
입력해야 할 값: OURPR_TOKEN
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 39일 전 변경됐고, 최신 버전(0.5.0)은 39일 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Node.js도 있어야 해요.
같은 카테고리에는: World Monitor, Claude Flow, Tldraw
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
Real-time global intelligence on conflict, markets, energy, trade, shipping and cyber. 102 tools.
AI orchestration with hive-mind swarms, neural networks, and 87 MCP tools for enterprise dev.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
An MCP server that lets an AI agent read your own running history from ourpr, and write one thing back. Ask about your training in plain language, in whatever agent you already use.
Every tool reads. One tool writes, and only that one: ourpr_plan_week puts a plan on a day still ahead. It cannot log a run, edit history, or issue another credential, and it needs a token made with the write scope.
In Claude you do not need this package. Add ourpr. from https://ourpr.app/your-runs: it signs you in once, with no token and nothing to install. This package is for a script or an agent on your own computer.
Reading your own runs is free. Planning is part of ourpr create, $10 a month, cancel any time: ourpr_plan_week answers only on an account that has it. Nothing else in ourpr costs money.
Every authenticated read in ourpr is gated by a session that lives about an hour, so nothing outside a browser could hold one. Personal access tokens changed that, and this is what they were for: your data, in your tools, with a credential you issued to yourself and can revoke.
1. Make a token. In ourpr, go to Settings → ourpr. mcp → Tokens for a script or a local server → New token. Name it after the machine it will live on, and choose Write if you want the agent to plan your week; Read otherwise. Copy it — it is shown once and cannot be recovered. A token lasts 90 days.
2. Point a client at it. The package runs from npm; nothing to clone.
Keep the token out of any file inside a project. A project's .mcp.json, .cursor/mcp.json or .vscode/mcp.json is often committed, and a committed token can be read by anyone who can read the repository. Every setup below keeps the token in a user-level place or in your system's secret store.
Pin the version. Each setup names an exact version, so a new release never runs with your token until you choose it. Change the number to update.
Read the token without echoing it, so it stays out of your shell history, then add the server for your user, not for a project:
printf 'Token: '; read -rs OURPR_TOKEN; echo
claude mcp add --scope user --env OURPR_TOKEN="$OURPR_TOKEN" --transport stdio \ ourpr -- npx -y ourpr-mcp-server@0.5.0 unset OURPR_TOKEN
Claude Code keeps it in ~/.claude.json, which belongs to your user.
Download ourpr.mcpb from the latest release and open it. Claude Desktop asks for the token and keeps it in your system's secret store. This is the recommended way.
Or edit claude_desktop_config.json, which lives in your user folder, not in a project. The token is then plain text in that file:
{
"mcpServers": { "ourpr": { "command": "npx", "args": ["-y", "ourpr-mcp-server@0.5.0"], "env": { "OURPR_TOKEN": "ourpr_pat_..." } } } }
Run MCP: Open User Configuration and add the server there. VS Code asks for the token once, masks it, and keeps it in its secret store:
{
"inputs": [ { "type": "promptString", "id": "ourpr-token", "description": "ourpr personal access token", "password": true } ], "servers": { "ourpr": { "type": "stdio", "command": "npx", "args": ["-y", "ourpr-mcp-server@0.5.0"], "env": { "OURPR_TOKEN": "${input:ourpr-token}" } } } }
Set OURPR_TOKEN in your shell profile or your system's secret manager, and add the server to the global ~/.cursor/mcp.json. The file holds only a reference to the variable:
{
"mcpServers": { "ourpr": { "command": "npx", "args": ["-y", "ourpr-mcp-server@0.5.0"], "env": { "OURPR_TOKEN": "${env:OURPR_TOKEN}" } } } }
Revoke it in Profile → Settings → ourpr. mcp, then make a new one. Revocation is immediate.
git clone https://github.com/joeyaflores/ourpr-mcp-server.git
cd ourpr-mcp-server npm install && npm run build && npm test
The server speaks MCP 2026-07-28, and it still answers a client that opens with the older initialize handshake. It is built on the official TypeScript SDK v2 (@modelcontextprotocol/server), and the tests run each version.
OURPR_TOKEN | Required. Your personal access token. |
OURPR_API_URL | Optional. Defaults to https://ourpr.onrender.com/api. |
The token is an environment variable and not a tool parameter, on purpose: it never changes between calls, so passing it per call would put a live credential into the agent's context, its transcript, and any log of either.
Every tool reads what you imported into ourpr, and what you logged or planned there. Runs that reach ourpr through the Strava sync stay out: Strava's API Policy (2026) keeps its API data out of MCP servers and AI tools. Your Strava bulk export is yours to use anywhere, so import it and every run is here.
ourpr_list_runsYour history between two dates, as a compact table: date, name, type, miles, pace, moving time, elevation, average heart rate.
Start here for almost anything — totals, streaks, trends, finding a run.
"How many miles did I run in July?"
"What was my longest run this spring?" "Show me every run over 15 miles in 2026"
start_date, end_date (YYYY-MM-DD), include_non_runs, limit.
It never truncates silently: if the window holds more than limit, the answer says how many were left out.
ourpr_get_runOne activity in full, with its mile splits, heart rate, cadence, calories and recording device.
"Break down my Boston Marathon splits"
"Did I positive or negative split that half?"
ourpr_run_streamA run resampled onto a fixed 10 metre grid — elevation, elapsed time, and where the watch recorded them, heart rate, power and cadence. Returns summary statistics per channel rather than every sample.
A 404 is a normal answer: indoor runs have no profile.
ourpr_run_lapsThe laps the watch itself recorded — the runner's own button presses, which is what a track session is actually divided by. Different from mile splits: laps follow the workout, splits follow the mile.
ourpr_rep_workoutsEvery interval session ourpr can find in your history, with the reps and their distance. An empty answer says how many activities were read, because "none found" and "none exist" are different claims.
ourpr_detect_repsAsk whether one particular run was an interval session.
ourpr_similar_terrainRuns matching a given distance and climb — how you find what you have already done that resembles a race you are training for.
"What have I run that's like Boston — 26 miles, 800 feet of climb?"
ourpr_training_blocksYour goal race and its Block: race day, distance, goal time, the week of the Block today falls in, and the miles for each week so far. A week that has not begun shows no miles, not zero. Also the Blocks before your past races, each with its result, its weeks and its peak week.
"What week of my Dallas block am I in, and how is my mileage building?"
"How does this block compare with the one before my last marathon?"
past: how many past Blocks, newest first. Three by default.
ourpr_list_racesEvery race ourpr finds in your history, tune-ups included, through the same detector the app's Blocks use. Each row carries the run id for ourpr_get_run. The answer also names the fastest result at 5K, 10K, half marathon and marathon.
"What is my half marathon PR?"
"List every marathon I have run, with the times"
distance, limit.
ourpr_list_plansThe plans already on your week between two dates, two weeks from today by default: the day, the name, the miles or time, the tag, your note, whether a run you logged fulfilled it, and whether ourpr create wrote it. An agent reads this before ourpr_plan_week, so a new plan does not land on a day that already holds one.
"What do I have planned for the next two weeks?"
"Did I do the runs I planned last week?"
start_date, end_date (YYYY-MM-DD).
ourpr_plan_weekThe one write. One planned run, or a week of them, onto days still ahead. Each lands on the runner's week as a plan they can see, edit and remove; the day sheet says it came from ourpr create. It never logs a run.
"Put a 6 mile easy run on Tuesday and 14 long on Saturday"
"Write me next week: three easy days, one workout, one long run"
plans, one to fourteen, each with date (YYYY-MM-DD, after today) and any of miles, minutes, name, note, tag (easy, workout, race), is_long.
Needs a token made with the Write scope, and ourpr create on the account. A Read token, or an account without create, is refused before anything is written. A runner may write 120 plans a day.
By an evaluation, not by listing the API.
Ten questions with verified answers were written first, computed straight from the database by an oracle that shares no code with this server (backend/scripts/mcp_eval_oracle.py). They said what actually matters: nine of ten need the activity window, three need one run in full, two need a second source.
So the window is the tool that has to be excellent — and a training_summary tool that seemed obvious while guessing turned out to answer nothing, and was not built.
Two of those questions are answered through this server, over the protocol, in four tool calls, and both match the oracle exactly:
Q1 peak week : 63.6 oracle 63.6 MATCH
Q2 fastest 10mi: 6:23 oracle 6:23 MATCH
A window can hold 800 runs. Handing an agent 800 full activity objects destroys the context it needs to think with, so ourpr_list_runs returns a compact markdown table and one run in full is a separate tool.
Same for streams: a ten mile run is about 1,600 samples per channel across five channels, so the tool returns min, average, max and coverage rather than 8,000 numbers the agent would only reduce anyway.
The token grants read access to your own runs, your goal race and your plans. On ourpr, every query a token makes is scoped to its owner by construction, and a test refuses a token route that could reach past it. A token made with the write scope, with ourpr create, may also put plans on your own week through one route, and nothing else. No token can log a run, issue another token, revoke your existing ones, or widen its own scope.
Each token may make 60 reads a minute, and a runner may write 120 plans a day. ourpr answers 429 past either, with RateLimit and Retry-After headers, and the tool says how long to wait.
Revoke any token at any time in Profile → Settings → ourpr. mcp. Revocation is immediate and permanent — a revoked token can never be restored.
A run's name and description are free text a person typed, or that arrived from an import. They travel into the same token stream as the agent's instructions, and a model has no boundary between the two.
Two defences, doing different jobs:
The structure is neutralised. Control characters, newlines, zero-width and bidirectional marks are stripped; a | is escaped so the table column it sits in survives; every field is capped. A newline in a name would otherwise end a table row early and shift every column after it — an agent then reads a wrong answer rather than refusing one.
The boundary is named. Runner-authored data is returned inside delimiters with one line saying it is data, not instructions. That reduces how often injection lands. It does not prevent it, and nothing here is written as though it did. The delimiters wrap the text content only; the structured result carries the same neutralised fields without them.
What this deliber