Trainer Connect
REMOTE · API.TRAINERCONNECT.COM.BR
Manage students, workouts, appointments and payments through your personal trainer account.
Available components
Last scanned (13 hours ago)
Scores higher than 96% of remote servers
Reachable. Last reached 5 Nov 2026.
Category CRM and Sales
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security94
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability68
- AI-judged instruction clarity (good).Pass
- Tool/resource definitions use about 16095 tokens (~56/item across 283 items; 283 tools + 0 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management80
- Stability observed for 24 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage86
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 58% of tool parameters carry a description.Partial
Tool Safety95
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 8 of 10 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "list_charges" implies "charge" and declares readOnlyHint instead, contradicting what its own name says it does. See how to fix → Partial
- An AI judge read all 284 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 5 Nov 26 +1
- Tool “get_anamnesis_overview” rewrote its description, which is the text the model reads security
- New tool “list_workouts_to_renew” functional
- New tool “update_program_exercise” functional
- “get_anamnesis_overview” added an optional parameter “status” cosmetic
- 4 Nov 26 0
- Tool “get_active_diets” rewrote its description, which is the text the model reads security
- Tool “get_latest_assessments” rewrote its description, which is the text the model reads security
- Tool “list_inactive_students” rewrote its description, which is the text the model reads security
- Tool “list_leads” rewrote its description, which is the text the model reads security
- Tool “list_payments” rewrote its description, which is the text the model reads security
- Tool “list_workout_suggestions” rewrote its description, which is the text the model reads security
- Tool “read_lead_chat” rewrote its description, which is the text the model reads security
- “get_latest_assessments” added an optional parameter “days” cosmetic
- “get_latest_assessments” added an optional parameter “only_due” cosmetic
- “list_workout_suggestions” added an optional parameter “status” cosmetic
- Tool “get_active_diets” changed its title: See active diets → See students diets cosmetic
- 3 Nov 26 +1
- Tool “get_checkins_overview” rewrote its description, which is the text the model reads security
- Tool “get_schedule” rewrote its description, which is the text the model reads security
- Tool “list_inactive_students” rewrote its description, which is the text the model reads security
- 2 Nov 26 0
- New tool “list_inactive_students” functional
- 1 Nov 26 +1
- A breaking change shipped without a version bump: still 3.0.0 ▼ security
- Tool “list_inactive_students” was removed ▼ security
- 30 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.
- 28 Oct 26 +1
- Tool “list_payments” rewrote its description, which is the text the model reads security
- “list_payments” added an optional parameter “student” cosmetic
- 27 Oct 26 0
- New tool “list_inactive_students” functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://api.trainerconnect.com.br/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=trainerconnect.com.br | CN=YE2,O=Let's Encrypt,C=US | 2 Oct 2026 | 31 Dec 2026 | ECDSA 256 | ECDSA-SHA384 | 6bd76400d5b877937fd28f1ac6c767ccd4b |
| SANs: *.trainerconnect.com.br, trainerconnect.com.br | ||||||
| CN=YE2,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 4df3b15dd6c0784c507cd37b58e6f115 |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of api.trainerconnect.com.br. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| br. | present | 38298 | 13 | Verified |
| com.br. | present | 50930 | 13 | Verified |
| trainerconnect.com.br. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer realm="mcp", resource_metadata="https://api.trainerconnect.com.br/.well-known/oauth-protected-resource/mcp"
Bearer realm="mcp", resource_metadata="https://api.trainerconnect.com.br/.well-known/oauth-protected-resource/mcp" | Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains; preload |
| x-content-type-options | nosniff |
Protected resource metadata
| Document | https://api.trainerconnect.com.br/.well-known/oauth-protected-resource/mcp |
|---|---|
| Retrieved | Yes |
| Resource | https://api.trainerconnect.com.br/mcp |
| Authorisation server | https://api.trainerconnect.com.br |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://api.trainerconnect.com.br/mcp | Verified | 200 | |
| http (plaintext) | http://api.trainerconnect.com.br/mcp | HTTPS enforced | 301 | https://api.trainerconnect.com.br/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
list_students List my students ~76
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.
| Name | Type | Req | Description |
|---|---|---|---|
| search | string | – | Part of the student's name. |
| status | string | – | "active" (default) or "all", which includes pending and inactive students. |
No output schema declared.
No examples provided.
list_subscription_payments See payments of a subscription ~32
Every charge of one subscription. Read only.
| Name | Type | Req | Description |
|---|---|---|---|
| subscriptionId | integer | yes | Id from list_subscriptions. |
No output schema declared.
No examples provided.
list_subscriptions See students subscriptions ~27
Each student's subscription to the trainer's plans, with status and next charge. Read only.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_support_tickets See my support tickets ~24
Support tickets the trainer opened with the Trainer Connect team, with status.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_tab_classes See classes that can go on a tab ~61
Classes of one student in a month that can be added to a tab, with the price per class. Read only.
| Name | Type | Req | Description |
|---|---|---|---|
| month | string | – | YYYY-MM, this month by default. |
| student_id | integer | yes | The student_id from list_students. |
No output schema declared.
No examples provided.
list_tabs See open tabs ~24
Tabs (comandas) of students: products and services consumed. Read only.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_team_members See my team ~28
Team members (other trainers, interns) of the trainer's account and what they can do.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_training_goals See training goals ~25
Training goals (hypertrophy, weight loss...) used in the library.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_unlinked_assessments See assessments without a student ~30
Assessments done before the person became a student (trial class), waiting to be attached.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_wallet_withdrawals See my withdrawals ~26
Withdrawals from the wallet to the bank, with status. Read only.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_workout_copies See who got a template ~39
Students who received a copy of a workout template, and whether their copy was customized.
| Name | Type | Req | Description |
|---|---|---|---|
| workoutId | integer | yes | Template workout id. |
No output schema declared.
No examples provided.
list_workout_suggestions See students workout change requests ~130
Changes students suggested to their workouts (load, reps, exercise swap), waiting for the trainer by default: student name, workout, exercise, current and suggested values, the student's message and the app_url of the review screen filtered on that student. Use it to answer "who asked to change the workout?"; approve_workout_suggestion or reject_workout_suggestion only after the trainer says so. status "approved", "rejected" or "all" shows the history.
| Name | Type | Req | Description |
|---|---|---|---|
| status | string | – | "pending" (default), "approved", "rejected" or "all". |
No output schema declared.
No examples provided.
list_workouts See all my workouts ~23
Every workout the trainer wrote, for all students, with the exercises.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_workouts_to_renew Find students whose workout is due for renewal ~180
Active students who keep training (finished a workout in the last 30 days) but whose workouts and programs have not changed for longer than the trainer's "renew the workout" reminder (Preferences, 6 weeks by default), with name, phone (the guardian's for a dependent), date of the last change, days_on_same_workout, workouts_url (the student's workouts screen, where the trainer renews it) and app_url of the profile, oldest first. Use it to answer "whose workout is overdue?" and then get_student or list_student_programs for one of them. Students who stopped training are list_inactive_students. Read only: nothing changes and nothing is sent.
| Name | Type | Req | Description |
|---|---|---|---|
| weeks | integer | – | Weeks on the same workout, 1 to 12, for this question only. Default: the trainer's Preferences. |
No output schema declared.
No examples provided.
mark_announcement_seen Mark an app announcement as seen ~35
Marks a Trainer Connect announcement from list_announcements as seen.
| Name | Type | Req | Description |
|---|---|---|---|
| announcementId | integer | yes | Id from list_announcements. |
No output schema declared.
No examples provided.
mark_chat_read Mark a chat as read ~32
Marks the chat with one student as read.
| Name | Type | Req | Description |
|---|---|---|---|
| studentId | integer | yes | The student_id from list_students. |
No output schema declared.
No examples provided.
mark_lead_read Mark a lead as read ~33
Marks a lead from list_leads as read.
| Name | Type | Req | Description |
|---|---|---|---|
| leadId | integer | yes | Id from list_leads. |
No output schema declared.
No examples provided.
mark_notification_read Mark a notification as read ~27
Marks one notification as read.
| Name | Type | Req | Description |
|---|---|---|---|
| notificationId | integer | yes | Id from list_notifications. |
No output schema declared.
No examples provided.
mark_notifications_read Mark notifications as read ~18
Marks every notification of the trainer as read.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
open_support_ticket Open a support ticket ~60
Opens a ticket with the Trainer Connect team (bug, question, account...). Show the text to the person before sending.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | yes | – |
| message | string | yes | Up to 5000 characters. |
| subject | string | yes | – |
No output schema declared.
No examples provided.
preview_payment_fees Simulate the fees of a charge ~115
How much the student pays and the trainer receives for an amount, method and installments. Only a simulation: nothing is charged.
| Name | Type | Req | Description |
|---|---|---|---|
| amount_cents | integer | yes | Amount in cents (R$ 300,00 = 30000). |
| installments | integer | – | Card installments, 1 by default. |
| pass_platform_fee | boolean | yes | Student pays the platform fee. |
| pass_processing_fee | boolean | yes | Student pays the processing fee. |
| payment_method | string | yes | – |
| provider | string | – | – |
No output schema declared.
No examples provided.
publish_workout Share a template in the catalog ~44
Publishes a workout template (no student) to the Trainer Connect catalog other trainers browse. Confirm with the person first.
| Name | Type | Req | Description |
|---|---|---|---|
| workoutId | integer | yes | Template workout id. |
No output schema declared.
No examples provided.
reactivate_student Reactivate a student ~37
Brings back a student who was inactive, with the history kept.
| Name | Type | Req | Description |
|---|---|---|---|
| studentId | integer | yes | The student_id from list_students. |
No output schema declared.
No examples provided.
read_chat Read a chat with a student ~33
Messages between the trainer and one student, newest last.
| Name | Type | Req | Description |
|---|---|---|---|
| studentId | integer | yes | The student_id from list_students. |
No output schema declared.
No examples provided.
read_lead_chat Read a lead conversation ~71
The conversation with a lead, oldest first. Reading here does not mark it as read: it stays unread in the app until the trainer opens it. To answer, draft the text, show it and only then call reply_to_lead.
| Name | Type | Req | Description |
|---|---|---|---|
| leadId | integer | yes | Id from list_leads. |
No output schema declared.
No examples provided.
reject_class_change Reject a class change ~48
Declines the student's request; the class stays where it was.
| Name | Type | Req | Description |
|---|---|---|---|
| requestId | integer | yes | Id from list_class_change_requests. |
| response_note | string | – | Message to the student. |
No output schema declared.
No examples provided.
reject_join_request Decline a student request ~32
Declines a request to train with the trainer.
| Name | Type | Req | Description |
|---|---|---|---|
| requestId | integer | yes | Id from list_join_requests. |
No output schema declared.
No examples provided.
reject_workout_suggestion Reject a workout change ~39
Rejects a student's suggestion; the workout stays as it is.
| Name | Type | Req | Description |
|---|---|---|---|
| suggestionId | integer | yes | Id from list_workout_suggestions. |
No output schema declared.
No examples provided.
rename_equipment Rename my equipment ~37
Renames equipment from list_equipment.
| Name | Type | Req | Description |
|---|---|---|---|
| equipmentId | integer | yes | Id from list_equipment. |
| name | string | yes | – |
No output schema declared.
No examples provided.
rename_muscle_group Rename my muscle group ~46
Renames a muscle group from list_muscle_groups.
| Name | Type | Req | Description |
|---|---|---|---|
| muscleGroupId | integer | yes | Id from list_muscle_groups. |
| name | string | yes | – |
No output schema declared.
No examples provided.
rename_training_goal Rename a training goal option ~41
Renames a training goal from list_training_goals.
| Name | Type | Req | Description |
|---|---|---|---|
| goalId | integer | yes | Id from list_training_goals. |
| name | string | yes | – |
No output schema declared.
No examples provided.
reorder_program_days Reorder the days of a week ~64
Puts the days of a program week in the order given (every day id of the week, first to last).
| Name | Type | Req | Description |
|---|---|---|---|
| day_ids | array | yes | Day ids from get_program, in the new order. |
| weekId | integer | yes | Week id from get_program. |
No output schema declared.
No examples provided.
reorder_program_weeks Reorder the weeks of a program ~64
Puts the weeks of a program in the order given (every week id of the program, first to last).
| Name | Type | Req | Description |
|---|---|---|---|
| programId | integer | yes | Id from list_programs. |
| week_ids | array | yes | Week ids from get_program, in the new order. |
No output schema declared.
No examples provided.
reply_support_ticket Reply to a support ticket ~42
Adds a message to one of the trainer's support tickets.
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | – |
| ticketId | integer | yes | Id from list_support_tickets. |
No output schema declared.
No examples provided.
reply_to_lead Reply to a lead ~62
Sends a message to a lead (in-app notification or e-mail). Show the text to the person before sending.
| Name | Type | Req | Description |
|---|---|---|---|
| leadId | integer | yes | Id from list_leads. |
| message | string | yes | The reply, up to 2000 characters. |
No output schema declared.
No examples provided.
reschedule_class Reschedule a class ~110
Proposes a new time for a class, like in the app: the student accepts it there, or the class moves at once if the trainer turned on "my changes apply immediately". The student is notified.
| Name | Type | Req | Description |
|---|---|---|---|
| appointment_id | integer | yes | Appointment id from get_schedule. |
| proposed_date_time | string | yes | New start, ISO 8601 with the -03:00 offset (Brazil time). |
| proposed_duration_minutes | integer | – | – |
| reason | string | – | Message to the student. |
No output schema declared.
No examples provided.
restore_anamnesis_form Restore a deleted anamnesis form ~39
Brings back a deleted anamnesis form of the trainer.
| Name | Type | Req | Description |
|---|---|---|---|
| formId | integer | yes | The anamnesis form id. |
No output schema declared.
No examples provided.
restore_assessment Restore a deleted assessment ~36
Brings back an assessment from list_deleted_assessments.
| Name | Type | Req | Description |
|---|---|---|---|
| assessmentId | integer | yes | Id from list_deleted_assessments. |
No output schema declared.
No examples provided.
restore_program Restore a deleted program ~27
Brings back a program that was deleted.
| Name | Type | Req | Description |
|---|---|---|---|
| programId | integer | yes | Program id. |
No output schema declared.
No examples provided.
restore_workout Restore a deleted workout ~32
Brings a workout back from the trash.
| Name | Type | Req | Description |
|---|---|---|---|
| workoutId | integer | yes | Id from list_deleted_workouts. |
No output schema declared.
No examples provided.
schedule_class Schedule a class ~139
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. To move or cancel it later use reschedule_class or cancel_class.
| Name | Type | Req | Description |
|---|---|---|---|
| date_time | string | yes | Start, "YYYY-MM-DD HH:MM" in Brazil time. |
| duration_minutes | integer | – | Default 60. |
| location | string | – | – |
| notes | string | – | – |
| student_id | integer | – | student_id from list_students; empty for a personal block. |
| title | string | – | – |
No output schema declared.
No examples provided.
schedule_diet_plan Schedule the next diet phase ~55
Schedules a diet plan to become the student's active diet on a future date.
| Name | Type | Req | Description |
|---|---|---|---|
| planId | integer | yes | Id from list_diet_plans. |
| starts_on | string | – | YYYY-MM-DD, after today. |
No output schema declared.
No examples provided.
search_exercises Search the exercise library ~83
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.
| Name | Type | Req | Description |
|---|---|---|---|
| search | string | yes | Exercise name or muscle. |
No output schema declared.
No examples provided.
search_foods Search foods ~58
Foods from the TACO table and the trainer's own, with macros per portion. Each word must appear in the name.
| Name | Type | Req | Description |
|---|---|---|---|
| q | string | – | Food name, e.g. "arroz integral". |
| source | string | – | – |
No output schema declared.
No examples provided.
send_anamnesis Send an anamnesis to a student ~88
Sends an anamnesis form for the student to fill in the app.
| Name | Type | Req | Description |
|---|---|---|---|
| anamnesis_form_id | integer | yes | Form id from list_anamnesis_forms. |
| expires_at | string | – | Deadline, YYYY-MM-DD. |
| notify_student | boolean | – | Push the student now (default true). |
| studentId | integer | yes | The student_id from list_students. |
No output schema declared.
No examples provided.
send_checkin Send a check-in to students ~56
Assigns a check-in questionnaire to one or more students; they answer in the app.
| Name | Type | Req | Description |
|---|---|---|---|
| student_ids | array | yes | student_id values from list_students. |
| templateId | integer | yes | Template id from list_checkin_templates. |
No output schema declared.
No examples provided.
send_message Message a student ~60
Sends a chat message to a student, who gets a push. Show the text to the person before sending.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | The message, up to 5000 characters. |
| receiver_id | integer | yes | The student_id from list_students. |
No output schema declared.
No examples provided.
send_student_password_reset_link Send a student the password link ~54
E-mails one of the trainer's students the link to create a new password (when the student forgot it). Returns the address it went to.
| Name | Type | Req | Description |
|---|---|---|---|
| studentId | integer | yes | The student_id from list_students. |
No output schema declared.
No examples provided.
send_support_chat_message Write to support ~31
Sends a message in the trainer's chat with the Trainer Connect support.
| Name | Type | Req | Description |
|---|---|---|---|
| message | string | yes | – |
No output schema declared.
No examples provided.
set_weekly_target Set a student weekly target ~64
How many workouts per week the student should do (1 to 7); null goes back to automatic.
| Name | Type | Req | Description |
|---|---|---|---|
| studentId | integer | yes | The student_id from list_students. |
| weekly_training_target | integer | yes | 1 to 7, or null for automatic. |
No output schema declared.
No examples provided.
How do I install the Trainer Connect MCP server?
Trainer Connect is a hosted endpoint at https://api.trainerconnect.com.br/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · api.trainerconnect.com.br
claude mcp add --transport http br-com-trainerconnect-personal-trainer 'https://api.trainerconnect.com.br/mcp'
What is the Trainer Connect MCP server?
Trainer Connect is an MCP server listed in the public MCP registry as br.com.trainerconnect/personal-trainer. Manage students, workouts, appointments and payments through your personal trainer account. This page covers its hosted endpoint (https://api.trainerconnect.com.br/mcp).
Is the Trainer Connect MCP server safe to use?
Trainer Connect scores 88 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Trainer Connect MCP server expose?
Trainer Connect exposes 283 tools: list_students, list_inactive_students, list_workouts_to_renew, get_checkins_overview, get_latest_assessments, and 278 more. Their descriptions and schemas cost roughly 15,509 tokens of context every time the server is loaded.
Does the Trainer Connect MCP server require authentication?
Yes. Trainer Connect asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.
Is the Trainer Connect MCP server still maintained?
Trainer Connect is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.