chore: publish clean community baseline
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
# Примеры Frankfurter
|
||||
|
||||
В этой папке лежат примеры операций Crank для публичного API Frankfurter. Это бесплатный API курсов валют без ключей доступа.
|
||||
|
||||
Публичный адрес API: `https://api.frankfurter.dev`.
|
||||
|
||||
## Группа “Курсы валют”
|
||||
|
||||
- `rates/frankfurter_latest_rate.operation.yaml` получает последний доступный курс для пары валют.
|
||||
- `rates/frankfurter_provider_rate.operation.yaml` получает курс от конкретного поставщика данных, например `ECB`.
|
||||
|
||||
## Группа “История курсов”
|
||||
|
||||
- `history/frankfurter_historical_rate.operation.yaml` получает курс валюты на конкретную дату.
|
||||
- `history/frankfurter_monthly_rates.operation.yaml` получает месячную динамику курса за период.
|
||||
|
||||
## Как использовать в демо
|
||||
|
||||
1. Импортируйте нужные YAML-файлы в Crank.
|
||||
2. Запустите тест операции. Ключи и секреты не нужны.
|
||||
3. Создайте агента для одной группы операций.
|
||||
4. Опубликуйте агента и подключите MCP-клиент к его endpoint.
|
||||
|
||||
Документация Frankfurter: https://frankfurter.dev/
|
||||
@@ -0,0 +1,99 @@
|
||||
format_version: "1"
|
||||
kind: operation
|
||||
operation:
|
||||
id: op_frankfurter_historical_rate
|
||||
name: frankfurter_historical_rate
|
||||
display_name: Исторический курс валюты
|
||||
category: frankfurter_history
|
||||
protocol: rest
|
||||
security_level: standard
|
||||
enabled: true
|
||||
status: draft
|
||||
version: 1
|
||||
target:
|
||||
kind: rest
|
||||
base_url: https://api.frankfurter.dev
|
||||
method: GET
|
||||
path_template: /v2/rates
|
||||
static_headers:
|
||||
Accept: application/json
|
||||
input_schema:
|
||||
type: object
|
||||
required: true
|
||||
fields:
|
||||
date:
|
||||
type: string
|
||||
required: true
|
||||
base:
|
||||
type: string
|
||||
required: true
|
||||
quote:
|
||||
type: string
|
||||
required: true
|
||||
output_schema:
|
||||
type: object
|
||||
required: true
|
||||
fields:
|
||||
date:
|
||||
type: string
|
||||
required: true
|
||||
base:
|
||||
type: string
|
||||
required: true
|
||||
quote:
|
||||
type: string
|
||||
required: true
|
||||
rate:
|
||||
type: number
|
||||
required: true
|
||||
input_mapping:
|
||||
rules:
|
||||
- source: $.mcp.date
|
||||
target: $.request.query.date
|
||||
required: true
|
||||
- source: $.mcp.base
|
||||
target: $.request.query.base
|
||||
required: true
|
||||
- source: $.mcp.quote
|
||||
target: $.request.query.quotes
|
||||
required: true
|
||||
output_mapping:
|
||||
rules:
|
||||
- source: $.response.body[0].date
|
||||
target: $.output.date
|
||||
required: true
|
||||
- source: $.response.body[0].base
|
||||
target: $.output.base
|
||||
required: true
|
||||
- source: $.response.body[0].quote
|
||||
target: $.output.quote
|
||||
required: true
|
||||
- source: $.response.body[0].rate
|
||||
target: $.output.rate
|
||||
required: true
|
||||
execution_config:
|
||||
timeout_ms: 10000
|
||||
retry_policy: null
|
||||
response_cache: null
|
||||
auth_profile_ref: null
|
||||
headers: {}
|
||||
protocol_options: null
|
||||
streaming: null
|
||||
tool_description:
|
||||
title: Исторический курс валюты
|
||||
description: Возвращает курс валюты на указанную дату через Frankfurter.
|
||||
tags:
|
||||
- frankfurter
|
||||
- currency
|
||||
- history
|
||||
- rest
|
||||
examples:
|
||||
- input:
|
||||
date: "2024-01-15"
|
||||
base: USD
|
||||
quote: EUR
|
||||
config_export:
|
||||
format_version: "1"
|
||||
export_mode: portable
|
||||
created_at: 2026-06-19T00:00:00Z
|
||||
updated_at: 2026-06-19T00:00:00Z
|
||||
@@ -0,0 +1,111 @@
|
||||
format_version: "1"
|
||||
kind: operation
|
||||
operation:
|
||||
id: op_frankfurter_monthly_rates
|
||||
name: frankfurter_monthly_rates
|
||||
display_name: Месячная динамика курса
|
||||
category: frankfurter_history
|
||||
protocol: rest
|
||||
security_level: standard
|
||||
enabled: true
|
||||
status: draft
|
||||
version: 1
|
||||
target:
|
||||
kind: rest
|
||||
base_url: https://api.frankfurter.dev
|
||||
method: GET
|
||||
path_template: /v2/rates
|
||||
static_headers:
|
||||
Accept: application/json
|
||||
input_schema:
|
||||
type: object
|
||||
required: true
|
||||
fields:
|
||||
from:
|
||||
type: string
|
||||
required: true
|
||||
to:
|
||||
type: string
|
||||
required: true
|
||||
base:
|
||||
type: string
|
||||
required: true
|
||||
quote:
|
||||
type: string
|
||||
required: true
|
||||
output_schema:
|
||||
type: object
|
||||
required: true
|
||||
fields:
|
||||
first_date:
|
||||
type: string
|
||||
required: true
|
||||
first_rate:
|
||||
type: number
|
||||
required: true
|
||||
first_quote:
|
||||
type: string
|
||||
required: true
|
||||
first_base:
|
||||
type: string
|
||||
required: true
|
||||
input_mapping:
|
||||
rules:
|
||||
- source: $.mcp.from
|
||||
target: $.request.query.from
|
||||
required: true
|
||||
- source: $.mcp.to
|
||||
target: $.request.query.to
|
||||
required: true
|
||||
- source: $.mcp.base
|
||||
target: $.request.query.base
|
||||
required: true
|
||||
- source: $.mcp.quote
|
||||
target: $.request.query.quotes
|
||||
required: true
|
||||
- source: $.mcp.group
|
||||
target: $.request.query.group
|
||||
required: false
|
||||
default_value: month
|
||||
output_mapping:
|
||||
rules:
|
||||
- source: $.response.body[0].date
|
||||
target: $.output.first_date
|
||||
required: true
|
||||
- source: $.response.body[0].rate
|
||||
target: $.output.first_rate
|
||||
required: true
|
||||
- source: $.response.body[0].quote
|
||||
target: $.output.first_quote
|
||||
required: true
|
||||
- source: $.response.body[0].base
|
||||
target: $.output.first_base
|
||||
required: true
|
||||
execution_config:
|
||||
timeout_ms: 10000
|
||||
retry_policy: null
|
||||
response_cache: null
|
||||
auth_profile_ref: null
|
||||
headers: {}
|
||||
protocol_options: null
|
||||
streaming: null
|
||||
tool_description:
|
||||
title: Месячная динамика курса
|
||||
description: Возвращает первую точку месячной динамики курса за выбранный период.
|
||||
tags:
|
||||
- frankfurter
|
||||
- currency
|
||||
- history
|
||||
- monthly
|
||||
- rest
|
||||
examples:
|
||||
- input:
|
||||
from: "2024-01-01"
|
||||
to: "2024-06-30"
|
||||
base: USD
|
||||
quote: EUR
|
||||
config_export:
|
||||
format_version: "1"
|
||||
export_mode: portable
|
||||
created_at: 2026-06-19T00:00:00Z
|
||||
updated_at: 2026-06-19T00:00:00Z
|
||||
@@ -0,0 +1,92 @@
|
||||
format_version: "1"
|
||||
kind: operation
|
||||
operation:
|
||||
id: op_frankfurter_latest_rate
|
||||
name: frankfurter_latest_rate
|
||||
display_name: Последний курс валюты
|
||||
category: frankfurter_rates
|
||||
protocol: rest
|
||||
security_level: standard
|
||||
enabled: true
|
||||
status: draft
|
||||
version: 1
|
||||
target:
|
||||
kind: rest
|
||||
base_url: https://api.frankfurter.dev
|
||||
method: GET
|
||||
path_template: /v2/rates
|
||||
static_headers:
|
||||
Accept: application/json
|
||||
input_schema:
|
||||
type: object
|
||||
required: true
|
||||
fields:
|
||||
base:
|
||||
type: string
|
||||
required: true
|
||||
quote:
|
||||
type: string
|
||||
required: true
|
||||
output_schema:
|
||||
type: object
|
||||
required: true
|
||||
fields:
|
||||
date:
|
||||
type: string
|
||||
required: true
|
||||
base:
|
||||
type: string
|
||||
required: true
|
||||
quote:
|
||||
type: string
|
||||
required: true
|
||||
rate:
|
||||
type: number
|
||||
required: true
|
||||
input_mapping:
|
||||
rules:
|
||||
- source: $.mcp.base
|
||||
target: $.request.query.base
|
||||
required: true
|
||||
- source: $.mcp.quote
|
||||
target: $.request.query.quotes
|
||||
required: true
|
||||
output_mapping:
|
||||
rules:
|
||||
- source: $.response.body[0].date
|
||||
target: $.output.date
|
||||
required: true
|
||||
- source: $.response.body[0].base
|
||||
target: $.output.base
|
||||
required: true
|
||||
- source: $.response.body[0].quote
|
||||
target: $.output.quote
|
||||
required: true
|
||||
- source: $.response.body[0].rate
|
||||
target: $.output.rate
|
||||
required: true
|
||||
execution_config:
|
||||
timeout_ms: 10000
|
||||
retry_policy: null
|
||||
response_cache: null
|
||||
auth_profile_ref: null
|
||||
headers: {}
|
||||
protocol_options: null
|
||||
streaming: null
|
||||
tool_description:
|
||||
title: Последний курс валюты
|
||||
description: Возвращает последний доступный курс одной валюты к другой через Frankfurter.
|
||||
tags:
|
||||
- frankfurter
|
||||
- currency
|
||||
- exchange-rate
|
||||
- rest
|
||||
examples:
|
||||
- input:
|
||||
base: USD
|
||||
quote: EUR
|
||||
config_export:
|
||||
format_version: "1"
|
||||
export_mode: portable
|
||||
created_at: 2026-06-19T00:00:00Z
|
||||
updated_at: 2026-06-19T00:00:00Z
|
||||
@@ -0,0 +1,99 @@
|
||||
format_version: "1"
|
||||
kind: operation
|
||||
operation:
|
||||
id: op_frankfurter_provider_rate
|
||||
name: frankfurter_provider_rate
|
||||
display_name: Курс от поставщика данных
|
||||
category: frankfurter_rates
|
||||
protocol: rest
|
||||
security_level: standard
|
||||
enabled: true
|
||||
status: draft
|
||||
version: 1
|
||||
target:
|
||||
kind: rest
|
||||
base_url: https://api.frankfurter.dev
|
||||
method: GET
|
||||
path_template: /v2/rates
|
||||
static_headers:
|
||||
Accept: application/json
|
||||
input_schema:
|
||||
type: object
|
||||
required: true
|
||||
fields:
|
||||
provider:
|
||||
type: string
|
||||
required: true
|
||||
base:
|
||||
type: string
|
||||
required: true
|
||||
quote:
|
||||
type: string
|
||||
required: true
|
||||
output_schema:
|
||||
type: object
|
||||
required: true
|
||||
fields:
|
||||
date:
|
||||
type: string
|
||||
required: true
|
||||
base:
|
||||
type: string
|
||||
required: true
|
||||
quote:
|
||||
type: string
|
||||
required: true
|
||||
rate:
|
||||
type: number
|
||||
required: true
|
||||
input_mapping:
|
||||
rules:
|
||||
- source: $.mcp.provider
|
||||
target: $.request.query.providers
|
||||
required: true
|
||||
- source: $.mcp.base
|
||||
target: $.request.query.base
|
||||
required: true
|
||||
- source: $.mcp.quote
|
||||
target: $.request.query.quotes
|
||||
required: true
|
||||
output_mapping:
|
||||
rules:
|
||||
- source: $.response.body[0].date
|
||||
target: $.output.date
|
||||
required: true
|
||||
- source: $.response.body[0].base
|
||||
target: $.output.base
|
||||
required: true
|
||||
- source: $.response.body[0].quote
|
||||
target: $.output.quote
|
||||
required: true
|
||||
- source: $.response.body[0].rate
|
||||
target: $.output.rate
|
||||
required: true
|
||||
execution_config:
|
||||
timeout_ms: 10000
|
||||
retry_policy: null
|
||||
response_cache: null
|
||||
auth_profile_ref: null
|
||||
headers: {}
|
||||
protocol_options: null
|
||||
streaming: null
|
||||
tool_description:
|
||||
title: Курс от поставщика данных
|
||||
description: Возвращает курс валюты от выбранного поставщика данных Frankfurter.
|
||||
tags:
|
||||
- frankfurter
|
||||
- currency
|
||||
- provider
|
||||
- rest
|
||||
examples:
|
||||
- input:
|
||||
provider: ECB
|
||||
base: EUR
|
||||
quote: USD
|
||||
config_export:
|
||||
format_version: "1"
|
||||
export_mode: portable
|
||||
created_at: 2026-06-19T00:00:00Z
|
||||
updated_at: 2026-06-19T00:00:00Z
|
||||
@@ -0,0 +1,120 @@
|
||||
{
|
||||
"name": "weather_current_open_meteo",
|
||||
"display_name": "Get Current Weather",
|
||||
"category": "weather",
|
||||
"protocol": "rest",
|
||||
"target": {
|
||||
"kind": "rest",
|
||||
"base_url": "https://api.open-meteo.com",
|
||||
"method": "GET",
|
||||
"path_template": "/v1/forecast",
|
||||
"static_headers": {}
|
||||
},
|
||||
"input_schema": {
|
||||
"type": "object",
|
||||
"required": true,
|
||||
"fields": {
|
||||
"latitude": {
|
||||
"type": "number",
|
||||
"required": true
|
||||
},
|
||||
"longitude": {
|
||||
"type": "number",
|
||||
"required": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"output_schema": {
|
||||
"type": "object",
|
||||
"required": true,
|
||||
"fields": {
|
||||
"time": {
|
||||
"type": "string",
|
||||
"required": true
|
||||
},
|
||||
"temperature_c": {
|
||||
"type": "number",
|
||||
"required": true
|
||||
},
|
||||
"wind_speed_kmh": {
|
||||
"type": "number",
|
||||
"required": true
|
||||
},
|
||||
"timezone": {
|
||||
"type": "string",
|
||||
"required": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"input_mapping": {
|
||||
"rules": [
|
||||
{
|
||||
"source": "$.mcp.latitude",
|
||||
"target": "$.request.query.latitude",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"source": "$.mcp.longitude",
|
||||
"target": "$.request.query.longitude",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"source": "$.mcp.current",
|
||||
"target": "$.request.query.current",
|
||||
"required": false,
|
||||
"default_value": "temperature_2m,wind_speed_10m"
|
||||
},
|
||||
{
|
||||
"source": "$.mcp.timezone",
|
||||
"target": "$.request.query.timezone",
|
||||
"required": false,
|
||||
"default_value": "Europe/Moscow"
|
||||
}
|
||||
]
|
||||
},
|
||||
"output_mapping": {
|
||||
"rules": [
|
||||
{
|
||||
"source": "$.response.body.current.time",
|
||||
"target": "$.output.time",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"source": "$.response.body.current.temperature_2m",
|
||||
"target": "$.output.temperature_c",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"source": "$.response.body.current.wind_speed_10m",
|
||||
"target": "$.output.wind_speed_kmh",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"source": "$.response.body.timezone",
|
||||
"target": "$.output.timezone",
|
||||
"required": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"execution_config": {
|
||||
"timeout_ms": 10000,
|
||||
"headers": {}
|
||||
},
|
||||
"tool_description": {
|
||||
"title": "Get Current Weather",
|
||||
"description": "Fetch current weather data from Open-Meteo by latitude and longitude.",
|
||||
"tags": [
|
||||
"weather",
|
||||
"rest",
|
||||
"smoke"
|
||||
],
|
||||
"examples": [
|
||||
{
|
||||
"input": {
|
||||
"latitude": 55.75,
|
||||
"longitude": 37.62
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
format_version: "1"
|
||||
kind: operation
|
||||
operation:
|
||||
name: weather_current_open_meteo
|
||||
display_name: Get Current Weather
|
||||
category: weather
|
||||
protocol: rest
|
||||
security_level: standard
|
||||
enabled: true
|
||||
status: draft
|
||||
version: 1
|
||||
target:
|
||||
kind: rest
|
||||
base_url: https://api.open-meteo.com
|
||||
method: GET
|
||||
path_template: /v1/forecast
|
||||
static_headers: {}
|
||||
input_schema:
|
||||
type: object
|
||||
required: true
|
||||
fields:
|
||||
latitude:
|
||||
type: number
|
||||
required: true
|
||||
longitude:
|
||||
type: number
|
||||
required: true
|
||||
output_schema:
|
||||
type: object
|
||||
required: true
|
||||
fields:
|
||||
time:
|
||||
type: string
|
||||
required: true
|
||||
temperature_c:
|
||||
type: number
|
||||
required: true
|
||||
wind_speed_kmh:
|
||||
type: number
|
||||
required: true
|
||||
timezone:
|
||||
type: string
|
||||
required: true
|
||||
input_mapping:
|
||||
rules:
|
||||
- source: $.mcp.latitude
|
||||
target: $.request.query.latitude
|
||||
required: true
|
||||
- source: $.mcp.longitude
|
||||
target: $.request.query.longitude
|
||||
required: true
|
||||
- source: $.mcp.current
|
||||
target: $.request.query.current
|
||||
required: false
|
||||
default_value: temperature_2m,wind_speed_10m
|
||||
- source: $.mcp.timezone
|
||||
target: $.request.query.timezone
|
||||
required: false
|
||||
default_value: Europe/Moscow
|
||||
output_mapping:
|
||||
rules:
|
||||
- source: $.response.body.current.time
|
||||
target: $.output.time
|
||||
required: true
|
||||
- source: $.response.body.current.temperature_2m
|
||||
target: $.output.temperature_c
|
||||
required: true
|
||||
- source: $.response.body.current.wind_speed_10m
|
||||
target: $.output.wind_speed_kmh
|
||||
required: true
|
||||
- source: $.response.body.timezone
|
||||
target: $.output.timezone
|
||||
required: true
|
||||
execution_config:
|
||||
timeout_ms: 10000
|
||||
retry_policy: null
|
||||
response_cache: null
|
||||
auth_profile_ref: null
|
||||
headers: {}
|
||||
protocol_options: null
|
||||
streaming: null
|
||||
tool_description:
|
||||
title: Get Current Weather
|
||||
description: Fetch current weather data from Open-Meteo by latitude and longitude.
|
||||
tags:
|
||||
- weather
|
||||
- rest
|
||||
- smoke
|
||||
examples:
|
||||
- input:
|
||||
latitude: 55.75
|
||||
longitude: 37.62
|
||||
config_export:
|
||||
format_version: "1"
|
||||
export_mode: portable
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"latitude": 55.75,
|
||||
"longitude": 37.62
|
||||
}
|
||||
Reference in New Issue
Block a user