Skip to main content
Glama

sisrun-mcp

🇧🇷 Versión en portugués a continuación

Servidor MCP no oficial que expone tu plan de entrenamiento de SisRUN (appsisrun.com.br) a asistentes de IA como Claude, para que puedas preguntar "¿qué me prescribió mi entrenador esta semana?" y obtener una respuesta estructurada.

SisRUN no tiene una API pública, por lo que este servidor lee las mismas páginas web que ves en tu navegador, con tus propias credenciales, y las convierte en datos estructurados de entrenamiento. Es de solo lectura: nunca escribe nada en SisRUN.

Herramientas

Herramienta

Qué devuelve

get_current_week()

Cada fila de entrenamiento de la semana actual

get_week(date)

La semana que contiene una fecha ISO (YYYY-MM-DD)

get_upcoming(weeks_ahead=1)

Entrenamientos prescritos pero no realizados desde hoy en adelante

Cada fila de entrenamiento incluye: fecha, estado (Proposto = prescrito, Feito = realizado, Feito Avulso = auto-importado, no prescrito), modalidad, distancia prescrita, rangos de ritmo y FC, la sesión estructurada del entrenador (calentamiento, repeticiones, recuperaciones), la nota del entrenador y lo que SisRUN asoció como entregado (fecha, distancia, tiempo, FC media, kcal; SisRUN autoimporta tus actividades de Garmin/Strava).

planned_km vs distance_km: El campo Distância del propio SisRUN está vacío en todo entrenamiento por intervalos, por cuestas o por tiempo, y en los días de intervalos solo cuenta las repeticiones. Al sumar esa columna se subestima la prescripción real en ~35% (el panel "Evolução Semanal" del propio SisRUN tiene el mismo error). planned_km deriva el número honesto de la sesión estructurada del entrenador, expandiendo los bloques Repetir Nx; planned_km_is_est: "yes" marca las filas en las que un paso cronometrado tuvo que convertirse en un ritmo supuesto.

Related MCP server: garmin-mcp

Instalación

uvx sisrun-mcp            # zero-install run from PyPI
# or
pipx install sisrun-mcp
# or straight from GitHub
uvx --from git+https://github.com/cdutr/sisrun-mcp sisrun-mcp

Credenciales

Tu propio inicio de sesión de SisRUN (el que te dio tu entrenador). O las variables de entorno:

export SISRUN_EMAIL=you@example.com
export SISRUN_PASSWORD=yourpassword

o un archivo de credenciales:

mkdir -p ~/.sisrun
cat > ~/.sisrun/credentials <<'EOF'
email=you@example.com
password=yourpassword
EOF
chmod 600 ~/.sisrun/credentials

⚠️ La contraseña se almacena en texto plano. SisRUN no ofrece un mecanismo de token ni OAuth, así que no hay una opción mejor. Mantén el archivo con chmod 600 y nunca lo subas.

Configuración de Claude Desktop / Claude Code

{
  "mcpServers": {
    "sisrun": {
      "command": "uvx",
      "args": ["sisrun-mcp"]
    }
  }
}

Depuración

Obtén e imprime tu semana actual sin ningún cliente MCP:

python -m sisrun_mcp selftest

Si algún resultado contiene un warning sobre paneles de detalle faltantes, la acumulación del estado de formulario JSF ha sufrido una regresión. Abre un issue con la salida (no contiene credenciales).

Cómo funciona (para los curiosos)

SisRUN es JSF + PrimeFaces 8.0. Cada solicitud lleva un token javax.faces.ViewState, y todos los ids de los widgets se generan en el servidor: cambian en cualquier redespliegue, así que nada aquí se codifica de forma fija. Los botones se buscan por sus estables atributos title creados por humanos, y el ViewState se vuelve a leer de cada respuesta. La parte no evidente es que los paneles de detalle del día son acordeones que el servidor solo renderiza cuando la solicitud lleva su estado desplegado, acumulado de una navegación a otra, junto con javax.faces.partial.execute=@all. Sin eso, se obtienen filas de resumen sin prescripciones. Ver los comentarios en client.py.

El cliente es deliberadamente respetuoso: una semana por solicitud, espaciadas 0,6 s, y el HTML de la semana se guarda en caché por proceso.

Contribuir

Aceptamos informes de errores, sugerencias de funciones y PRs, en inglés o portugués. Ver CONTRIBUTING.md.

Estado y descargos

  • No oficial. No está afiliado a SisRUN, ni respaldado ni reconocido por él. Puede romperse cuando SisRUN cambie su página web; issues y PRs son bienvenidos.

  • Solo tus datos. Esto accede a tu propio plan de entrenamiento con tus propias credenciales, que la misma portabilidad de datos que la LGPD te otorga. No lo uses con cuentas que no sean tuyas y respeta los términos de servicio de SisRUN.

  • Probado con cuentas reales desde 2026-07. Python ≥ 3.10, una sola dependencia (mcp).

En portugués (pr-BR)

Servidor MCP no oficial que expone tu planilla de entrenamiento de SisRUN (appsisrun.com.br) a asistentes de IA como Claude. Con él preguntas "¿qué recetó el entrenador esta semana?" y recibes los entrenamientos estructurados: estado (Proposto / Feito / Feito Avulso), distancia, rangos de ritmo y de FC, la estructura de la sesión (calentamiento, tiros, recuperaciones), la nota del entrenador y lo que SisRUN asoció como realizado (SisRUN importa tus actividades del Garmin/Strava automáticamente).

SisRUN no tiene una API pública, así que el servidor lee las mismas páginas que ves en el navegador, con tus propias credenciales. Es de solo lectura: nunca escribe nada en SisRUN.

Herramientas: get_current_week() (semana actual), get_week(date) (semana de una fecha), get_upcoming(weeks_ahead) (entrenamientos propuestos de aquí en adelante).

Instalación:

uvx sisrun-mcp
# ou
pipx install sisrun-mcp

Credenciales: tu propio login de SisRUN, por variables de entorno (SISRUN_EMAIL / SISRUN_PASSWORD) o por el archivo ~/.sisrun/credentials:

email=voce@exemplo.com
password=suasenha
chmod 600 ~/.sisrun/credentials

⚠️ La contraseña está en texto plano. SisRUN no ofrece OAuth ni token, así que no hay mejor opción. Mantén el archivo con chmod 600 y nunca lo subas a un repositorio.

Sobre planned_km: el campo distância del propio SisRUN está vacío en todo entrenamiento intervalado, entre colinas o por tiempo, y en los días de subida solo cuenta las repeticiones. Sumar esa columna subestima la prescripción real en ~35% (el panel "Evolução Semanal" del propio SisRUN tiene el mismo error). planned_km obtiene el número honesto a partir de la sesión estructurada del entrenador, expandiendo los bloques Repetir Nx.

Avisos: proyecto no afiliado, no endosado y no respaldado por SisRUN. Puede romperse cuando cambie la página (issues y PRs son bienvenidos). Accede solo a tus propios datos, con tus propias credenciales, la misma portabilidad que te garantiza la LGPD. No lo uses con cuentas ajenas y respeta los términos de uso de SisRUN.

Para depurar sin cliente MCP: python -m sisrun_mcp selftest imprime la semana actual en JSON.

Licencia

MIT

Available Tools

3 tools
get_current_weekA

The current week's training plan: every workout with status (Proposto = prescribed / Feito = done / Feito Avulso = auto-imported, not prescribed), modality, prescribed distance (planned_km is the honest number; the raw distance_km field is blank on interval days), pace/HR windows, the coach's structured session, and what SisRUN matched as delivered.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It does this exceptionally well: it explains the status vocabulary, warns that planned_km is the reliable number and raw distance_km may be blank on interval days, and clarifies what the coach's session vs. SisRUN-matched delivered data means.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single structured enumeration with no filler words, and all listed items are meaningful. It is slightly long and runs the items together in one sentence, so a bulleted or shorter phrasing would be improve readability without losing content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read tool, the description is almost complete: it covers the data included, notable field quirks, and status meanings. It does not specify things like timezone, but that is a minor omission given the output schema exists and the intended meaning is clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the schema covers everything needed. The description adds value by focusing on the output structure, which is appropriate given the zero-parameter context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the resource by saying 'The current week's training plan' and enumerates what it contains. It is more than a tautology and distinguishes from siblings by the 'current week' qualifier, though it lacks an explicit retrieval verb and does not directly compare to siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly say when to use this tool versus get_week or get_upcoming. The 'current week' phrasing implies the usage context, but there is no direct guidance about alternatives or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_upcomingA

Prescribed workouts (status Proposto) from today forward, across the current week plus weeks_ahead future weeks (default 1, max 8).

NameRequiredDescriptionDefault
weeks_aheadNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the burden of behavioral disclosure. It explains the status filter, exclusion of past workouts, and the configurable future-week window, which are the key behavioral characteristics needed by an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, tight sentence covers purpose, status filter, time window, default, and max. No filler or redundant restating of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter getter with an output schema, the description provides enough information to understand what the tool returns and how the parameter behaves. It could be improved by acknowledging the sibling tools and clarifying ordering, but nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only provides the type and default, but the description adds semantic meaning: weeks_ahead controls the number of future weeks beyond the current week, with a default of 1 and max of 8. This makes the parameter's effect clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific resource (prescribed workouts) and a specific status filter (Proposto) with a clear time window (today forward through future weeks). It does not explicitly mention sibling tools, but the 'today forward' scope differentiates it from get_current_week and get_week well enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The time window implies the intended use: retrieving upcoming proposed workouts. However, it does not give explicit guidance on when to choose this over get_current_week or get_week, nor when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_weekA

The training plan for the week containing date (YYYY-MM-DD). Navigating far from the current week costs one request per week hop.

NameRequiredDescriptionDefault
dateYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses a non-obvious behavioral trait: each week hop away from the current week costs an extra request. It does not discuss edge cases or invalid dates, but it gives the agent useful insight beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded purpose, no filler. It states what the tool does and then adds the cost caveat efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has only one required parameter, an output schema exists, and the description covers parameter format and an important behavioral cost. It could be more complete by explicitly naming which sibling to use for current or upcoming weeks, but the essentials for invoking it correctly are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only says date is a string, so the description's 'YYYY-MM-DD' format and statement that the week contains that date add critical meaning. With 0% schema coverage, the description compensates well for the tool's one parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns 'the training plan for the week containing date', making the resource and action identifiable. It does not explicitly distinguish itself from get_current_week or get_upcoming, but the purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The cost note ('Navigating far from the current week costs one request per week hop') implies that dates far from the current week should be avoided when possible, but it never says when to use this tool rather than get_current_week or get_upcoming. The usage context is implied, not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.1.0
    • First observedget_current_week
    • First observedget_upcoming
    • First observedget_week

TDQS

A4.1/5.0

Scored across 3 tools

Disambiguation5/5

Each tool addresses a clearly different temporal scope: the current week, an arbitrary week by date, and the rolling set of upcoming prescribed workouts. While get_current_week and get_week could both return the current week in some cases, their intended use cases are distinct and visible from the descriptions.

Naming Consistency4/5

All tools follow a get_ prefix and use temporal terms, which creates a predictable pattern. get_upcoming is slightly less noun-like than get_current_week and get_week, but the naming style is still consistent and readable.

Tool Count5/5

Three tools is a well-scoped size for a read-only training-plan retrieval server. Each tool serves a distinct need and none feels redundant or padding.

Completeness4/5

The server covers the primary retrieval needs for a training plan: current week, any specific week, and upcoming planned workouts. Minor gaps like direct workout-level detail or historical summaries are not obviously required for the stated scope.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to read Garmin activities and create/schedule structured workouts and multi-week training plans on Garmin Connect, syncing to the user's watch.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to read Garmin activities and create/schedule structured workouts and multi-week training plans directly on Garmin Connect, syncing to your watch with guided prompts.
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Provides AI assistants with read-only access to an athlete's Intervals.icu training data, including activities, wellness metrics, zones, and planned events, for use with MCP clients like ChatGPT and Claude.
    15
    MIT