diff --git a/config/packages/mcp.yaml b/config/packages/mcp.yaml index 41951882..b0c18f7b 100644 --- a/config/packages/mcp.yaml +++ b/config/packages/mcp.yaml @@ -6,7 +6,7 @@ mcp: chatbot: name: 'MyE&P chatbot' version: '1.0.0' - instructions: 'Answers questions about the trips and website content of E&P Reisen and its brands. Every result carries a url to cite. Prices and availability are a snapshot as of dataAsOf; the booking page is binding.' + instructions: 'Answers questions about the trips and website content of E&P Reisen and its brands. Every result carries a url to cite. Prices and availability are a snapshot as of dataAsOf; the booking page is binding. The structured trip fields of search_trips and get_trip (dates, rooms, prices, pickups, inclusions) come from the booking system and override anything editorial text says about them: product descriptions, FAQs and search_content/get_document results can be out of date.' http: path: /mcp # DNS rebinding protection guards unauthenticated local servers. This one is diff --git a/docs/chatbot-mcp.md b/docs/chatbot-mcp.md index 1bd5f0eb..43e52ddb 100644 --- a/docs/chatbot-mcp.md +++ b/docs/chatbot-mcp.md @@ -44,6 +44,11 @@ that prices and availability are a snapshot (`dataAsOf`) and only the booking pa | `search_content` | Questions not about dates or prices | Up to 8 hits with a ~600-character excerpt | | `get_document` | The full text of one `search_content` hit, by `url` | Markdown body, truncated at 20 000 characters | +Editorial text (product descriptions, FAQs, pages) is maintained by hand in TYPO3 and can lag behind BusPro, e.g. an +old price or a changed inclusion. The server instructions and the tool descriptions therefore tell the model that the +structured trip fields of `search_trips` and `get_trip` override whatever the text says about dates, prices, pickups +and inclusions. + Every result carries the public `url`. Output is compact JSON with Markdown in the text fields. An empty result is `{"results": []}`. Invalid input produces a tool error the model can read. diff --git a/src/Chatbot/Mcp/Tool/GetDocumentTool.php b/src/Chatbot/Mcp/Tool/GetDocumentTool.php index 17931643..2d3ccffb 100644 --- a/src/Chatbot/Mcp/Tool/GetDocumentTool.php +++ b/src/Chatbot/Mcp/Tool/GetDocumentTool.php @@ -15,7 +15,7 @@ use Mcp\Schema\ToolAnnotations; #[McpTool( name: 'get_document', - description: 'Read the full text of one search_content hit, by its url.', + description: 'Read the full text of one search_content hit, by its url. Editorial text can be out of date: take dates, prices, pickups and inclusions from search_trips and get_trip instead.', annotations: new ToolAnnotations(readOnlyHint: true, openWorldHint: false), )] final class GetDocumentTool diff --git a/src/Chatbot/Mcp/Tool/GetTripTool.php b/src/Chatbot/Mcp/Tool/GetTripTool.php index 6f6219fb..46b4ecc6 100644 --- a/src/Chatbot/Mcp/Tool/GetTripTool.php +++ b/src/Chatbot/Mcp/Tool/GetTripTool.php @@ -14,7 +14,7 @@ use Mcp\Schema\ToolAnnotations; #[McpTool( name: 'get_trip', - description: 'Full details of one trip: description, included services, programme, hotel, all upcoming dates with rooms, prices per person in EUR and availability, pickup points and departure times, FAQs. Pickup surcharges are per person and per direction: surchargeOutbound for the way there, surchargeReturn for the way back, surchargeRoundTrip for both; quote the round trip unless the user travels one way only. Use after search_trips, or when the user names a specific trip or a booked date (date codes such as SSLMP061226 narrow the answer to that date). Prices and availability are a snapshot as of dataAsOf; the booking page is binding.', + description: 'Full details of one trip: description, included services, programme, hotel, all upcoming dates with rooms, prices per person in EUR and availability, pickup points and departure times, FAQs. Pickup surcharges are per person and per direction: surchargeOutbound for the way there, surchargeReturn for the way back, surchargeRoundTrip for both; quote the round trip unless the user travels one way only. Use after search_trips, or when the user names a specific trip or a booked date (date codes such as SSLMP061226 narrow the answer to that date). Prices and availability are a snapshot as of dataAsOf; the booking page is binding. description and FAQs are editorial website text and can be out of date: where they state a date, price, pickup or inclusion that differs from the structured fields, the structured fields are right.', annotations: new ToolAnnotations(readOnlyHint: true, openWorldHint: false), )] final class GetTripTool diff --git a/src/Chatbot/Mcp/Tool/SearchContentTool.php b/src/Chatbot/Mcp/Tool/SearchContentTool.php index 6e88d002..e6efeea0 100644 --- a/src/Chatbot/Mcp/Tool/SearchContentTool.php +++ b/src/Chatbot/Mcp/Tool/SearchContentTool.php @@ -15,7 +15,7 @@ use Mcp\Schema\ToolAnnotations; #[McpTool( name: 'search_content', - description: "Search the websites' editorial content: destinations, hotels, travel information, FAQs, terms, blog articles, general company information. Use for questions that are not about specific dates or prices. Returns excerpts; use get_document for the full text of a hit.", + description: "Search the websites' editorial content: destinations, hotels, travel information, FAQs, terms, blog articles, general company information. Use for questions that are not about specific dates or prices. Returns excerpts; use get_document for the full text of a hit. Editorial text can be out of date: take dates, prices, pickups and inclusions from search_trips and get_trip instead.", annotations: new ToolAnnotations(readOnlyHint: true, openWorldHint: false), )] final class SearchContentTool