Skip to main content
Glama

MYOPL MCP Server - Official Pickleball Rules & Ratings

Look Up Public OPL Ratings

get_public_player_rating
Read-onlyIdempotent

Look up current published OPL ratings by exact public username without sign-in. Returns singles and doubles ratings, Reliability Score, game and point totals, source links and a Messenger profile invitation link. Compatible clients can display one MYOPL rating card. Contact details and individual match history are excluded.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "username": "<username>"
    },
    "name": "get_public_player_rating"
  }
}

Input Schema

NameRequiredDescriptionDefault
usernameYesExact public MYOPL username without the @ prefix; for example g.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / description
      Added value: +"Arguments for get_public_player_rating."
    • addedInput schema / properties / username / description
      Added value: +"Exact public MYOPL username without the @ prefix; for example g."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "https://json-schema.org/draft/2020-12/schema",
      +  "description": "MYOPL structured response for get_public_player_rating.",
      +  "oneOf": [
      +    {
      +      "oneOf": [
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "doubles": {
      +              "additionalProperties": false,
      +              "description": "Doubles rating and public card totals. Games are distinct from matches.",
      +              "properties": {
      +                "games_lost": {
      +                  "description": "Games lost in this format; null means unknown and zero means a known zero total.",
      +                  "minimum": 0,
      +                  "type": [
      +                    "integer",
      +                    "null"
      +                  ]
      +                },
      +                "games_played": {
      +                  "description": "Games played in this format; null means unknown and zero means a known zero total.",
      +                  "minimum": 0,
      +                  "type": [
      +                    "integer",
      +                    "null"
      +                  ]
      +                },
      +                "games_won": {
      +                  "description": "Games won in this format; null means unknown and zero means a known zero total.",
      +                  "minimum": 0,
      +                  "type": [
      +                    "integer",
      +                    "null"
      +                  ]
      +                },
      +                "points_lost": {
      +                  "description": "Points lost in this format; null means unknown and zero means a known zero total.",
      +                  "minimum": 0,
      +                  "type": [
      +                    "integer",
      +                    "null"
      +                  ]
      +                },
      +                "points_won": {
      +                  "description": "Points won in this format; null means unknown and zero means a known zero total.",
      +                  "minimum": 0,
      +                  "type": [
      +                    "integer",
      +                    "null"
      +                  ]
      +                },
      +                "rating": {
      +                  "description": "Published OPL rating as an exact decimal string, preserving precision; null means unrated.",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "reliability_score": {
      +                  "description": "Reliability Score from 0 to 100; null means unavailable.",
      +                  "maximum": 100,
      +                  "minimum": 0,
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "status": {
      +                  "description": "Whether a published rating exists.",
      +                  "enum": [
      +                    "rated",
      +                    "unrated"
      +                  ],
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "rating",
      +                "status",
      +                "reliability_score",
      +                "games_played",
      +                "games_won",
      +                "games_lost",
      +                "points_won",
      +                "points_lost"
      +              ],
      +              "type": "object"
      +            },
      +            "doubles_opl": {
      +              "description": "Published OPL rating as an exact decimal string, preserving precision; null means unrated.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "found": {
      +              "const": true,
      +              "description": "Whether an accessible player with this exact username was found.",
      +              "type": "boolean"
      +            },
      +            "guidance": {
      +              "description": "Instructions for citing and interpreting the public rating totals.",
      +              "type": "string"
      +            },
      +            "messenger_url": {
      +              "description": "Player's unique MYOPL Messenger invitation link.",
      +              "format": "uri",
      +              "type": "string"
      +            },
      +            "retrieved_at": {
      +              "description": "Time this response was retrieved, including UTC offset.",
      +              "format": "date-time",
      +              "type": "string"
      +            },
      +            "singles": {
      +              "additionalProperties": false,
      +              "description": "Singles rating and public card totals. Games are distinct from matches.",
      +              "properties": {
      +                "games_lost": {
      +                  "description": "Games lost in this format; null means unknown and zero means a known zero total.",
      +                  "minimum": 0,
      +                  "type": [
      +                    "integer",
      +                    "null"
      +                  ]
      +                },
      +                "games_played": {
      +                  "description": "Games played in this format; null means unknown and zero means a known zero total.",
      +                  "minimum": 0,
      +                  "type": [
      +                    "integer",
      +                    "null"
      +                  ]
      +                },
      +                "games_won": {
      +                  "description": "Games won in this format; null means unknown and zero means a known zero total.",
      +                  "minimum": 0,
      +                  "type": [
      +                    "integer",
      +                    "null"
      +                  ]
      +                },
      +                "points_lost": {
      +                  "description": "Points lost in this format; null means unknown and zero means a known zero total.",
      +                  "minimum": 0,
      +                  "type": [
      +                    "integer",
      +                    "null"
      +                  ]
      +                },
      +                "points_won": {
      +                  "description": "Points won in this format; null means unknown and zero means a known zero total.",
      +                  "minimum": 0,
      +                  "type": [
      +                    "integer",
      +                    "null"
      +                  ]
      +                },
      +                "rating": {
      +                  "description": "Published OPL rating as an exact decimal string, preserving precision; null means unrated.",
      +                  "type": [
      +                    "string",
      +                    "null"
      +                  ]
      +                },
      +                "reliability_score": {
      +                  "description": "Reliability Score from 0 to 100; null means unavailable.",
      +                  "maximum": 100,
      +                  "minimum": 0,
      +                  "type": [
      +                    "number",
      +                    "null"
      +                  ]
      +                },
      +                "status": {
      +                  "description": "Whether a published rating exists.",
      +                  "enum": [
      +                    "rated",
      +                    "unrated"
      +                  ],
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "rating",
      +                "status",
      +                "reliability_score",
      +                "games_played",
      +                "games_won",
      +                "games_lost",
      +                "points_won",
      +                "points_lost"
      +              ],
      +              "type": "object"
      +            },
      +            "singles_opl": {
      +              "description": "Published OPL rating as an exact decimal string, preserving precision; null means unrated.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "source": {
      +              "const": "MYOPL",
      +              "description": "Source platform.",
      +              "type": "string"
      +            },
      +            "source_url": {
      +              "description": "MYOPL rating reference to cite in the answer.",
      +              "format": "uri",
      +              "type": "string"
      +            },
      +            "spoken_reply": {
      +              "description": "Rating and public card totals with MYOPL attribution and links.",
      +              "type": "string"
      +            },
      +            "sport": {
      +              "const": "pickleball",
      +              "description": "Sport for these ratings.",
      +              "type": "string"
      +            },
      +            "username": {
      +              "description": "Exact MYOPL player username.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "found",
      +            "source",
      +            "source_url",
      +            "spoken_reply",
      +            "retrieved_at",
      +            "username",
      +            "sport",
      +            "singles_opl",
      +            "doubles_opl",
      +            "singles",
      +            "doubles",
      +            "messenger_url",
      +            "guidance"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "additionalProperties": false,
      +          "properties": {
      +            "found": {
      +              "const": false,
      +              "description": "Whether an accessible player with this exact username was found.",
      +              "type": "boolean"
      +            },
      +            "retrieved_at": {
      +              "description": "Time this response was retrieved, including UTC offset.",
      +              "format": "date-time",
      +              "type": "string"
      +            },
      +            "source": {
      +              "const": "MYOPL",
      +              "description": "Source platform.",
      +              "type": "string"
      +            },
      +            "source_url": {
      +              "description": "MYOPL rating reference to cite in the answer.",
      +              "format": "uri",
      +              "type": "string"
      +            },
      +            "spoken_reply": {
      +              "description": "Rating and public card totals with MYOPL attribution and links.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "found",
      +            "source",
      +            "source_url",
      +            "spoken_reply",
      +            "retrieved_at"
      +          ],
      +          "type": "object"
      +        }
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "error": {
      +          "description": "Tool execution or argument error; the enclosing result has isError set to true.",
      +          "type": "string"
      +        },
      +        "myopl_url": {
      +          "description": "MYOPL website.",
      +          "format": "uri",
      +          "type": "string"
      +        },
      +        "source": {
      +          "const": "MYOPL",
      +          "description": "Source platform.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "error",
      +        "source",
      +        "myopl_url"
      +      ],
      +      "type": "object"
      +    }
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already declare read-only, idempotent, non-destructive, open-world behavior, so the bar is lower. The description still adds real context beyond them: no authentication is needed, contact details and individual match history are deliberately excluded, and clients may render a single MYOPL rating card. Rate limits and error behavior for unknown usernames are not covered.

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?

Three compact sentences, front-loaded with the action and key, followed by return contents and exclusions. The clause about compatible clients displaying one MYOPL rating card is slightly tangential but still carries useful consumer-facing context, so nothing is seriously wasteful.

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

Completeness5/5

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

For a single-parameter, read-only lookup with an output schema and full annotation coverage, the description covers who can call it, how the key must be formed, what comes back, and what is intentionally withheld. An agent has everything needed to invoke it correctly.

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

Parameters3/5

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

Schema coverage is 100%, and the parameter already documents the exact-username format, the no-@-prefix rule, and the character pattern. The description's "exact public username" merely reinforces that, adding no new syntax or edge-case detail, so baseline 3 applies.

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

Purpose5/5

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

The description opens with a specific verb and resource ("Look up current published OPL ratings") and pins down the lookup key ("by exact public username"), which clearly separates it from the sibling search/browse tools that operate over help, website, rules, or browsing.

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

Usage Guidelines4/5

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

It gives clear operating context: lookup is by exact username and requires no sign-in, which implies there is no fuzzy or partial matching. It stops short of explicitly naming an alternative for partial-name or non-rating lookups, so it is strong but not a full when/when-not routing statement.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources