_ registry / mcp streamable-http · checked 2h ago

Trainer Connect

https://api.trainerconnect.com.br

Registry code: 67aa667a55ecfe7f

api record

Trainer Connect is the app personal trainers use to run their business. The person connected is a personal trainer

(mostly in Brazil) and this connection can do everything the trainer does in the app, as that trainer.

endpoint
https://api.trainerconnect.com.br/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is Trainer Connect live?
Yes — it answered the hub's last check (checked 2h ago). It answered 100% of checks over the last 30 days.
Is Trainer Connect free to use?
Partly — some of its tools are open, others need a key or payment.
What tools does Trainer Connect have?
14 tools: api_write, get_trainer, list_students, get_student, list_payments, create_student, search_exercises, create_workout, ….
Is Trainer Connect safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
100%

90 days 100%· all time 100%

latency
329ms

last good check

priced tools
0

of 14 tools

_ answered our checks, 90 days 1 checks · signed record
  • unknown → live
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 14 tools
1 open2 auth-required 11 never probed 3 of 14 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • find_trainers open 2h ago

    Find personal trainers listed in the public Trainer Connect directory (most are in Brazil; some are Brazilian trainers abroad), by specialty, name, city or state, and online or in-person. Specialties are written in Portuguese, e.g. "musculação", "emagrecimento", "funcional", "corrida", "hipertrofia". Returns up to 10 trainers with their public profile link. Contact details are never returned: the person talks to the trainer through the profile page.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "query": {
          "type": "string",
          "description": "Specialty, goal or trainer name, in Portuguese when possible, e.g. \"emagrecimento\", \"musculação\", \"gestante\"."
        },
        "location": {
          "type": "string",
          "description": "City and/or Brazilian state (name or two-letter code), e.g. \"Campinas\", \"SP\", \"Rio de Janeiro\". Leave out for online coaching, which works from anywhere."
        },
        "modality": {
          "enum": [
            "online",
            "in_person"
          ],
          "type": "string",
          "description": "online for remote coaching, in_person for sessions at a gym or at home."
        }
      }
    }
    arguments 21 lines
  • get_schedule auth-required 2h ago

    Lists the trainer's classes and appointments between two dates (today and the next 7 days by default): date and time, student, type, status, place and notes. Times are in Brazil time (America/Sao_Paulo).

    mcp-tool

    {
      "type": "object",
      "properties": {
        "to": {
          "type": "string",
          "maxLength": 10,
          "description": "Last day, YYYY-MM-DD. Default: 7 days after \"from\". At most 62 days after \"from\"."
        },
        "from": {
          "type": "string",
          "maxLength": 10,
          "description": "First day, YYYY-MM-DD. Default: today."
        }
      }
    }
    arguments 15 lines
  • list_operations auth-required 2h ago

    Lists the Trainer Connect app operations this connection can run (method, path, summary): students, workouts and programs, exercise library, schedule and classes, workout sessions and history, physical assessments, anamnesis, diet plans and nutrition, check-ins, chat, contracts, charges and payments, team, public page, AI generation and more. Filter with a keyword (Portuguese or English, e.g. "workout", "assessment", "diet", "appointment", "charge"). Then use describe_operation to see the fields and api_read or api_write to run it. Also returns the connected trainer_id, used in paths like /v1/trainers/{trainerId}/students.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "keyword": {
          "type": "string",
          "maxLength": 60,
          "description": "Part of the path or summary, e.g. \"workout\", \"assessment\", \"diet\"."
        }
      }
    }
    arguments 10 lines
  • api_write unknown never probed

    Runs any POST, PUT, PATCH or DELETE operation from list_operations as the connected trainer, exactly as the app would: edit or archive workouts, assign programs, log or edit a session, create assessments, diet plans and check-ins, send chat messages, cancel or move classes, create contracts and charges, update the public page, and more. Same permissions, plan limits and validation as the app; a 422 lists what is missing. It can notify students (push, e-mail) and some operations cannot be undone, so confirm with the person first. Withdrawals, bank details, password and account deletion stay in the app.

    mcp-tool

    {
      "type": "object",
      "required": [
        "method",
        "path"
      ],
      "properties": {
        "body": {
          "type": "object",
          "description": "JSON body with the fields from describe_operation."
        },
        "path": {
          "type": "string",
          "maxLength": 300,
          "description": "Path with ids filled in, e.g. /v1/workouts/5216."
        },
        "method": {
          "enum": [
            "POST",
            "PUT",
            "PATCH",
            "DELETE"
          ],
          "type": "string",
          "description": "HTTP method from list_operations."
        }
      }
    }
    arguments 28 lines
  • get_trainer unknown never probed

    Show the public profile of one personal trainer from the Trainer Connect directory: bio, specialties, where they work, online or in person, and the plans they publish with price and billing period. The person contacts the trainer or signs up for a plan on the profile_url page; this connector never books, pays or sends messages.

    mcp-tool

    {
      "type": "object",
      "required": [
        "trainer"
      ],
      "properties": {
        "trainer": {
          "type": "string",
          "description": "The trainer id (\"trainer\" field) returned by find_trainers."
        }
      }
    }
    arguments 12 lines
  • list_students unknown never probed

    Lists the connected personal trainer's students with status, goal and start date. Optionally filter by part of the name. Use the returned student_id with get_student.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "search": {
          "type": "string",
          "maxLength": 80,
          "description": "Part of the student's name."
        },
        "status": {
          "enum": [
            "active",
            "all"
          ],
          "type": "string",
          "description": "\"active\" (default) or \"all\", which includes pending and inactive students."
        }
      }
    }
    arguments 18 lines
  • get_student unknown never probed

    Gets one of the trainer's students: profile (goal, age, weight, height), the active workouts with their exercises, sets, reps and load, and the latest logged sessions with how many in the last 30 days.

    mcp-tool

    {
      "type": "object",
      "required": [
        "student_id"
      ],
      "properties": {
        "student_id": {
          "type": "integer",
          "description": "The student_id returned by list_students."
        }
      }
    }
    arguments 12 lines
  • list_payments unknown never probed

    Lists what the trainer's students paid or owe: amount, student, due date, paid date and status. Use status "overdue" for unpaid charges past their due date, "open" for everything not paid yet, "paid" for received payments. Totals are in BRL.

    mcp-tool

    {
      "type": "object",
      "properties": {
        "to": {
          "type": "string",
          "maxLength": 10,
          "description": "Due or paid on or before, YYYY-MM-DD."
        },
        "from": {
          "type": "string",
          "maxLength": 10,
          "description": "Due or paid on or after, YYYY-MM-DD."
        },
        "status": {
          "enum": [
            "overdue",
            "open",
            "paid",
            "all"
          ],
          "type": "string",
          "description": "\"overdue\", \"open\", \"paid\" or \"all\" (default)."
        }
      }
    }
    arguments 25 lines
  • create_student unknown never probed

    Adds a student to the trainer's account, like "Adicionar aluno" in the app: the student gets an e-mail invite to install the app and see workouts. Name and e-mail are required; goal, weight, height, birth date and sex are optional. Respects the student limit of the trainer's plan.

    mcp-tool

    {
      "type": "object",
      "required": [
        "name",
        "email"
      ],
      "properties": {
        "sex": {
          "enum": [
            "male",
            "female"
          ],
          "type": "string"
        },
        "goal": {
          "type": "string",
          "maxLength": 255,
          "description": "Goal, e.g. hipertrofia, emagrecimento."
        },
        "name": {
          "type": "string",
          "maxLength": 255,
          "description": "Student full name."
        },
        "email": {
          "type": "string",
          "maxLength": 255,
          "description": "Student e-mail (the invite goes there)."
        },
        "phone": {
          "type": "string",
          "maxLength": 30,
          "description": "Phone with area code."
        },
        "height_cm": {
          "type": "number",
          "description": "Height in cm."
        },
        "weight_kg": {
          "type": "number",
          "description": "Weight in kg."
        },
        "birth_date": {
          "type": "string",
          "maxLength": 10,
          "description": "YYYY-MM-DD."
        }
      }
    }
    arguments 49 lines
  • search_exercises unknown never probed

    Searches the Trainer Connect exercise library (with demo videos), in Portuguese or English: "supino", "agachamento", "remada", "glúteo", "esteira". Returns the exercise id to pass as edb_exercise_id in create_workout, so the student sees the video.

    mcp-tool

    {
      "type": "object",
      "required": [
        "search"
      ],
      "properties": {
        "search": {
          "type": "string",
          "maxLength": 120,
          "description": "Exercise name or muscle."
        }
      }
    }
    arguments 13 lines
  • create_workout unknown never probed

    Creates a workout, assigned to a student (student_id) or as a template when student_id is empty, with its exercises: sets, reps (or a range with reps_max), load, rest, duration for cardio, notes. Exercises are matched to the Trainer Connect library by name so the student sees the demo video (or pass edb_exercise_id from search_exercises). For a weekly program, call it once per day with the same program name and day_of_week. The student is notified, like in the app.

    mcp-tool

    {
      "type": "object",
      "required": [
        "title",
        "exercises"
      ],
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 255,
          "description": "Workout name, e.g. \"Treino A - Peito e Tríceps\"."
        },
        "program": {
          "type": "string",
          "maxLength": 255,
          "description": "Program/week name that groups the days, e.g. \"Hipertrofia outubro\"."
        },
        "exercises": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name"
            ],
            "properties": {
              "name": {
                "type": "string"
              },
              "reps": {
                "type": "integer"
              },
              "sets": {
                "type": "integer"
              },
              "notes": {
                "type": "string"
              },
              "phase": {
                "enum": [
                  "warmup",
                  "main",
                  "cooldown"
                ],
                "type": "string"
              },
              "weight": {
                "type": "number",
                "description": "Load in kg."
              },
              "reps_max": {
                "type": "integer",
                "description": "Top of a rep range, e.g. 8-12."
              },
              "rest_seconds": {
                "type": "integer"
              },
              "edb_exercise_id": {
                "type": "integer",
                "description": "From search_exercises."
              },
              "duration_seconds": {
                "type": "integer",
                "description": "For cardio or isometric holds."
              }
            }
          },
          "minItems": 1,
          "description": "Exercises in order."
        },
        "student_id": {
          "type": "integer",
          "description": "student_id from list_students. Empty = template in the trainer's library."
        },
        "day_of_week": {
          "enum": [
            "monday",
            "tuesday",
            "wednesday",
            "thursday",
            "friday",
            "saturday",
            "sunday"
          ],
          "type": "string",
          "description": "monday … sunday."
        },
        "description": {
          "type": "string",
          "maxLength": 2000,
          "description": "Notes for the student."
        },
        "estimated_minutes": {
          "type": "integer",
          "description": "Expected duration."
        }
      }
    }
    arguments 97 lines
  • schedule_class unknown never probed

    Books a class or appointment on the trainer's schedule (Brazil time, America/Sao_Paulo), with a student or as a personal block when student_id is empty. The student is notified, like in the app. Cancelling or moving a class is done in the app (or with api_write on /v1/appointments/{id} where that tool exists).

    mcp-tool

    {
      "type": "object",
      "required": [
        "date_time"
      ],
      "properties": {
        "notes": {
          "type": "string",
          "maxLength": 2000
        },
        "title": {
          "type": "string",
          "maxLength": 255
        },
        "location": {
          "type": "string",
          "maxLength": 500
        },
        "date_time": {
          "type": "string",
          "maxLength": 20,
          "description": "Start, \"YYYY-MM-DD HH:MM\" in Brazil time."
        },
        "student_id": {
          "type": "integer",
          "description": "student_id from list_students; empty for a personal block."
        },
        "duration_minutes": {
          "type": "integer",
          "description": "Default 60."
        }
      }
    }
    arguments 33 lines
  • describe_operation unknown never probed

    Shows what one Trainer Connect operation accepts: route parameters and the validation rules of each field (required, type, allowed values). Use it before api_write so the request is right the first time.

    mcp-tool

    {
      "type": "object",
      "required": [
        "method",
        "path"
      ],
      "properties": {
        "path": {
          "type": "string",
          "maxLength": 200,
          "description": "Path from list_operations, with or without ids filled in, e.g. /v1/workouts."
        },
        "method": {
          "enum": [
            "GET",
            "POST",
            "PUT",
            "PATCH",
            "DELETE"
          ],
          "type": "string",
          "description": "HTTP method from list_operations."
        }
      }
    }
    arguments 25 lines
  • api_read unknown never probed

    Runs any GET operation from list_operations as the connected trainer and returns the same JSON the app gets: a student's assessments, anamnesis, diet plan, workout history and sessions, check-ins, chat messages, contracts, financial metrics, the exercise library and more. Same permissions as the app.

    mcp-tool

    {
      "type": "object",
      "required": [
        "path"
      ],
      "properties": {
        "path": {
          "type": "string",
          "maxLength": 300,
          "description": "Path with ids filled in, e.g. /v1/students/312/assessments."
        },
        "query": {
          "type": "object",
          "description": "Query string parameters, e.g. {\"search\": \"supino\"}."
        }
      }
    }
    arguments 17 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 67aa667a55ecfe7f.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/67aa667a55ecfe7f/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/67aa667a55ecfe7f/badge.svg)](https://brick.blue/agent/67aa667a55ecfe7f?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.