|
|
@@ -207,6 +207,20 @@ async def get_chat_thread(service_key: str, chat_id: str) -> dict:
|
|
|
return result
|
|
|
|
|
|
|
|
|
+@mcp.tool()
|
|
|
+async def chat_send_ready(service_key: str) -> dict:
|
|
|
+ """Check whether sending messages is currently available for a service. Returns {ready: bool}."""
|
|
|
+ from room_cal.service_api import ServiceAPI
|
|
|
+ api = ServiceAPI()
|
|
|
+ try:
|
|
|
+ client = api.chat_client(service_key)
|
|
|
+ except KeyError:
|
|
|
+ raise ValueError(f'unknown service: {service_key!r}')
|
|
|
+ except TypeError:
|
|
|
+ raise ValueError(f'{service_key!r} does not support chat')
|
|
|
+ return {'ready': client.send_ready()}
|
|
|
+
|
|
|
+
|
|
|
@mcp.tool()
|
|
|
async def send_chat_message(service_key: str, chat_id: str, body: str) -> None:
|
|
|
"""Send a text message to a guest conversation thread."""
|
|
|
@@ -247,8 +261,10 @@ async def run_action(
|
|
|
feed_name: str | None = None,
|
|
|
title: str | None = None,
|
|
|
service: str | None = None,
|
|
|
+ weekday: int | None = None,
|
|
|
+ weekend: int | None = None,
|
|
|
) -> object:
|
|
|
- """Run a room_cal action over a date range. action must be one of the names in _ACTIONS (auto-discovered from room_cal.actions). Optional kwargs: feed_name, title (fetch-feed); service (fetch-prices)."""
|
|
|
+ """Run a room_cal action over a date range. action must be one of the names in _ACTIONS (auto-discovered from room_cal.actions). Optional kwargs: feed_name, title (fetch-feed); service (fetch-prices); weekday, weekend (fill-prices)."""
|
|
|
from datetime import date as _date
|
|
|
if action not in _ACTIONS:
|
|
|
raise ValueError(f'Unknown action: {action!r}')
|
|
|
@@ -257,6 +273,6 @@ async def run_action(
|
|
|
fn = getattr(mod, fn_name)
|
|
|
start = _date.fromisoformat(start_date)
|
|
|
end = _date.fromisoformat(end_date) if end_date else start
|
|
|
- all_kwargs = {'feed_name': feed_name, 'title': title, 'service': service}
|
|
|
+ all_kwargs = {'feed_name': feed_name, 'title': title, 'service': service, 'weekday': weekday, 'weekend': weekend}
|
|
|
kwargs = {k: v for k, v in all_kwargs.items() if k in allowed_keys and v is not None}
|
|
|
return await fn(start, end, **kwargs)
|