OPENSKILL MCP
The rating models as agent-callable tools. An agent can rate a match or predict a result without installing anything.
The endpoint imports the same module the playground uses, so it inherits the build-time check against openskill.py. It cannot silently drift from the library.
Connect
{
"mcpServers": {
"openskill": {
"type": "http",
"url": "https://vivekjoshy.com/api/mcp"
}
}
}JSON-RPC over HTTP POST, MCP protocol 2025-06-18. No authentication and no state — every call is a pure function of its arguments. Bounded at 64 teams, 512 players and 16 messages per batch, because the rating maths is quadratic in team count and the endpoint is public.
Tools
rate_match
Update ratings from a finished match. Ranks are 1-based ascending, so [1,2] means the first team won; equal values are a draw.
{"name":"rate_match","arguments":{
"teams": [[{"mu":25,"sigma":8.333}], [{"mu":30,"sigma":4}]],
"ranks": [1, 2],
"model": "plackett_luce"
}}predict_win
Win probability per team for an upcoming match. Exact for two teams; the pairwise generalisation beyond that.
{"name":"predict_win","arguments":{
"teams": [[{"mu":25,"sigma":8.333}], [{"mu":30,"sigma":4}]]
}}compare_models
Rate one match under all three Weng-Lin models to see where they separate. Bradley-Terry and Plackett-Luce agree for two teams and diverge for three or more.
{"name":"compare_models","arguments":{
"teams": [[{"mu":25,"sigma":8.333}], [{"mu":28,"sigma":6}], [{"mu":22,"sigma":7}]],
"ranks": [2, 1, 3]
}}ordinal
Conservative single number for display or sorting: mu minus z sigma, z=3 by default, so players the system is still unsure about rank lower.
{"name":"ordinal","arguments":{"mu":27.6,"sigma":8.07}}Try it
curl -s https://vivekjoshy.com/api/mcp \
-H 'content-type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' A plain GET on the same URL returns the server descriptor.