Football fixtures, venues and the cheapest ticket prices held by Weekend Goals.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Upcoming football matches in a city or a country between two dates, with the cheapest ticket price we hold. Accepts exactly one of city or country. Supports filters for budget, men's or women's football, senior, reserve or youth sides, and top competitions. `url` is the match's page on weekendgoals.com, listing every seller and price we hold.
Last day, YYYY-MM-DD, any date ahead. 7 days after the first unless given, and at most 31 days after it.
A city, for example Lisbon. Omit when naming a country.
First day, YYYY-MM-DD. Today unless given.
How many matches to return, 20 unless given, at most 50.
senior, reserve or youth: which side plays. Leaves out competitions classified otherwise.
men or women: who plays. Leaves out competitions classified the other way.
A country, for example Portugal. Omit when naming a city.
The currency to show prices in: the one the user wrote their budget in or uses where they are. When absent, maxPrice's currency, else USD.
Keep only matches whose cheapest ticket costs at most this. The budget is compared with every ticket at today's exchange rate; a match priced only in a currency with no rate is kept and marked priceNotConverted, and a match with no price is left out.
True to keep only the matches of the highest-ranked competitions found, for example the top division rather than the lower leagues. Friendlies are left out.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http weekend-goals 'https://www.weekendgoals.com/api/v1/mcp?source=registry'
Upcoming football matches in a city or a country between two dates, with the cheapest ticket price we hold. Accepts exactly one of city or country. Supports filters for budget, men's or women's football, senior, reserve or youth sides, and top competitions. `url` is the match's page on weekendgoals.com, listing every seller and price we hold.
| Argument | Type | Description |
|---|---|---|
| to | string | Last day, YYYY-MM-DD, any date ahead. 7 days after the first unless given, and at most 31 days after it. |
| city | string | A city, for example Lisbon. Omit when naming a country. |
| from | string | First day, YYYY-MM-DD. Today unless given. |
| limit | integer | How many matches to return, 20 unless given, at most 50. |
| squad | string | senior, reserve or youth: which side plays. Leaves out competitions classified otherwise. |
| gender | string | men or women: who plays. Leaves out competitions classified the other way. |
| country | string | A country, for example Portugal. Omit when naming a city. |
| currency | string | The currency to show prices in: the one the user wrote their budget in or uses where they are. When absent, maxPrice's currency, else USD. |
| maxPrice | object | Keep only matches whose cheapest ticket costs at most this. The budget is compared with every ticket at today's exchange rate; a match priced only in a currency with no rate is kept and marked priceNotConverted, and a match with no price is left out. |
| topRanksOnly | boolean | True to keep only the matches of the highest-ranked competitions found, for example the top division rather than the lower leagues. Friendlies are left out. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"to": {
"type": "string",
"description": "Last day, YYYY-MM-DD, any date ahead. 7 days after the first unless given, and at most 31 days after it."
},
"city": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "A city, for example Lisbon. Omit when naming a country."
},
"from": {
"type": "string",
"description": "First day, YYYY-MM-DD. Today unless given."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "How many matches to return, 20 unless given, at most 50."
},
"squad": {
"enum": [
"senior",
"youth",
"reserve"
],
"type": "string",
"description": "senior, reserve or youth: which side plays. Leaves out competitions classified otherwise."
},
"gender": {
"enum": [
"men",
"women"
],
"type": "string",
"description": "men or women: who plays. Leaves out competitions classified the other way."
},
"country": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "A country, for example Portugal. Omit when naming a city."
},
"currency": {
"type": "string",
"description": "The currency to show prices in: the one the user wrote their budget in or uses where they are. When absent, maxPrice's currency, else USD."
},
"maxPrice": {
"type": "object",
"required": [
"amount",
"currency"
],
"properties": {
"amount": {
"type": "number",
"description": "The most the visitor will pay for one ticket.",
"exclusiveMinimum": 0
},
"currency": {
"type": "string",
"maxLength": 3,
"minLength": 3,
"description": "The ISO 4217 code of that amount, for example EUR or GBP."
}
},
"description": "Keep only matches whose cheapest ticket costs at most this. The budget is compared with every ticket at today's exchange rate; a match priced only in a currency with no rate is kept and marked priceNotConverted, and a match with no price is left out."
},
"topRanksOnly": {
"type": "boolean",
"description": "True to keep only the matches of the highest-ranked competitions found, for example the top division rather than the lower leagues. Friendlies are left out."
}
}
}Upcoming football matches within a distance of a point, given as latitude and longitude, between two dates, with the cheapest ticket price we hold. Supports locations outside named cities and the same budget, men's or women's, squad and top-competitions filters as find_matches. `url` is the match's page on weekendgoals.com, listing every seller and price we hold.
| Argument | Type | Description |
|---|---|---|
| to | string | Last day, YYYY-MM-DD, any date ahead. 7 days after the first unless given, and at most 31 days after it. |
| from | string | First day, YYYY-MM-DD. Today unless given. |
| limit | integer | How many matches to return, 20 unless given, at most 50. |
| squad | string | senior, reserve or youth: which side plays. Leaves out competitions classified otherwise. |
| gender | string | men or women: who plays. Leaves out competitions classified the other way. |
| currency | string | The currency to show prices in: the one the user wrote their budget in or uses where they are. When absent, maxPrice's currency, else USD. |
| latitude* | number | Latitude of the point to search around, for example 38.72. |
One match: kickoff, teams, competition, the cheapest price we hold at each ticket seller, the venue and any available travel directions. `url` is the match's page on weekendgoals.com, listing every seller and price we hold.
| Argument | Type | Description |
|---|---|---|
| matchId* | string | The matchId another tool returned. |
| currency | string | The currency to show prices in: the one the user wrote their budget in or uses where they are. When absent, maxPrice's currency, else USD. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"matchId"
],
"properties": {
"matchId": {
"type": "string",
"maxLength": 48,
"minLength": 1,
"description": "The matchId another tool returned."
},
"currency": {
"type": "string",
"description": "The currency to show prices in: the one the user wrote their budget in or uses where they are. When absent, maxPrice's currency, else USD."
}
}
}A team's upcoming fixtures, home and away. `url` is the match's page on weekendgoals.com, listing every seller and price we hold.
| Argument | Type | Description |
|---|---|---|
| team* | string | The team's name, for example Benfica. A name not found may be known as written in its own country, for example Bayern München, with any suffix such as U19. |
| limit | integer | How many matches to return, 20 unless given, at most 50. |
| currency | string | The currency to show prices in: the one the user wrote their budget in or uses where they are. When absent, maxPrice's currency, else USD. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"team"
],
"properties": {
"team": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The team's name, for example Benfica. A name not found may be known as written in its own country, for example Bayern München, with any suffix such as U19."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "How many matches to return, 20 unless given, at most 50."
},
"currency": {
"type": "string",
"description": "The currency to show prices in: the one the user wrote their budget in or uses where they are. When absent, maxPrice's currency, else USD."
}
}
}The upcoming matches at one stadium. `url` is the match's page on weekendgoals.com, listing every seller and price we hold.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many matches to return, 20 unless given, at most 50. |
| venue* | string | The stadium's name, for example Estádio da Luz. |
| currency | string | The currency to show prices in: the one the user wrote their budget in or uses where they are. When absent, maxPrice's currency, else USD. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"venue"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "How many matches to return, 20 unless given, at most 50."
},
"venue": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The stadium's name, for example Estádio da Luz."
},
"currency": {
"type": "string",
"description": "The currency to show prices in: the one the user wrote their budget in or uses where they are. When absent, maxPrice's currency, else USD."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 4, 2026.
| maxPrice | object | Keep only matches whose cheapest ticket costs at most this. The budget is compared with every ticket at today's exchange rate; a match priced only in a currency with no rate is kept and marked priceNotConverted, and a match with no price is left out. |
| radiusKm | number | How far from the point to look, in kilometres: 50 unless given, at most 200. |
| longitude* | number | Longitude of the point to search around, for example -9.14. |
| topRanksOnly | boolean | True to keep only the matches of the highest-ranked competitions found, for example the top division rather than the lower leagues. Friendlies are left out. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"latitude",
"longitude"
],
"properties": {
"to": {
"type": "string",
"description": "Last day, YYYY-MM-DD, any date ahead. 7 days after the first unless given, and at most 31 days after it."
},
"from": {
"type": "string",
"description": "First day, YYYY-MM-DD. Today unless given."
},
"limit": {
"type": "integer",
"maximum": 50,
"minimum": 1,
"description": "How many matches to return, 20 unless given, at most 50."
},
"squad": {
"enum": [
"senior",
"youth",
"reserve"
],
"type": "string",
"description": "senior, reserve or youth: which side plays. Leaves out competitions classified otherwise."
},
"gender": {
"enum": [
"men",
"women"
],
"type": "string",
"description": "men or women: who plays. Leaves out competitions classified the other way."
},
"currency": {
"type": "string",
"description": "The currency to show prices in: the one the user wrote their budget in or uses where they are. When absent, maxPrice's currency, else USD."
},
"latitude": {
"type": "number",
"maximum": 90,
"minimum": -90,
"description": "Latitude of the point to search around, for example 38.72."
},
"maxPrice": {
"type": "object",
"required": [
"amount",
"currency"
],
"properties": {
"amount": {
"type": "number",
"description": "The most the visitor will pay for one ticket.",
"exclusiveMinimum": 0
},
"currency": {
"type": "string",
"maxLength": 3,
"minLength": 3,
"description": "The ISO 4217 code of that amount, for example EUR or GBP."
}
},
"description": "Keep only matches whose cheapest ticket costs at most this. The budget is compared with every ticket at today's exchange rate; a match priced only in a currency with no rate is kept and marked priceNotConverted, and a match with no price is left out."
},
"radiusKm": {
"type": "number",
"maximum": 200,
"description": "How far from the point to look, in kilometres: 50 unless given, at most 200.",
"exclusiveMinimum": 0
},
"longitude": {
"type": "number",
"maximum": 180,
"minimum": -180,
"description": "Longitude of the point to search around, for example -9.14."
},
"topRanksOnly": {
"type": "boolean",
"description": "True to keep only the matches of the highest-ranked competitions found, for example the top division rather than the lower leagues. Friendlies are left out."
}
}
}