Pawstay pet otel yönetim sistemi için Model Context Protocol (MCP) sunucusu — URL tabanlı erişim.
POST https://mcp.pawstay.net/mcp
Bu sunucu herhangi bir API anahtarı tutmaz. Her kullanıcı, Pawstay'de kendi oteli için kendi Integration App'ini oluşturur ve aldığı paw_live_... anahtarını her isteğe Authorization: Bearer <anahtar> header'ı olarak ekler. Sunucu anahtarı olduğu gibi Pawstay API'sine iletir; izolasyonu, scope kontrolünü ve audit log'u Pawstay yapar.
curl -s -X POST https://pawstay.net/api/v1/login -H "Content-Type: application/json" -d '{ "email": "sen@ornek.com", "password": "sifre" }'
curl -s https://pawstay.net/api/v1/integration_apps/scopes -H "Authorization: Bearer <jwt>"
paw_live_... anahtarınız olur):
curl -s -X POST https://pawstay.net/api/v1/integration_apps -H "Content-Type: application/json" -H "Authorization: Bearer <jwt>" -d '{ "integration_app": { "name": "MCP Bağlantım", "scopes": ["hotels:read", "customers:write"] } }'
Claude Code — .mcp.json:
{ "mcpServers": { "pawstay": { "type": "http", "url": "https://mcp.pawstay.net/mcp", "headers": { "Authorization": "Bearer paw_live_..." } } } }
Cursor — ~/.cursor/mcp.json: aynı yapı ("url" + "headers").
stdio-only istemciler için npx mcp-remote https://mcp.pawstay.net/mcp kullanılabilir; ancak mcp-remote'un header desteği sınırlı olduğundan Claude Code / Cursor önerilir.
pawstay_get_current_pet_hotel — Get the current user's pet hotel informationpawstay_list_customers — List all customers for the current pet hotel. Supports filtering by name, phone, and pet name.pawstay_get_customer — Get a specific customer by IDpawstay_create_customer — Create a new customerpawstay_update_customer — Update an existing customerpawstay_delete_customer — Delete a customerpawstay_list_pets — List all pets for the current pet hotel. Supports Ransack search predicates.pawstay_get_pet — Get a specific pet by IDpawstay_create_pet — Create a new petpawstay_update_pet — Update an existing petpawstay_delete_pet — Delete a petpawstay_list_dog_breeds — List all available dog breedspawstay_get_dog_breed — Get a specific dog breed by IDpawstay_list_reservations — List reservations with optional filters. Supports status filter and ransack search predicates.pawstay_get_reservation — Get a specific reservation by ID with full details including financial summary and reservation dayspawstay_create_reservation — Create a new reservationpawstay_update_reservation — Update an existing reservationpawstay_fire_reservation — Change reservation state. Allowed transitions: pending→check_in, checked_in→check_out, pending→cancelpawstay_assign_room — Assign or unassign a room to/from a reservation. Fails if the reservation is a training reservation with training_location='at_customer_home' — change training_location to 'at_facility' first.pawstay_reschedule_reservation — Reschedule reservation datespawstay_list_folio_items — List all folio items for a reservationpawstay_create_folio_item — Add a new folio item (payment, expense, or discount) to a reservationpawstay_list_invoices — List all invoices across all reservationspawstay_get_invoice — Get a specific invoice by IDpawstay_list_reservation_invoices — List all invoices for a specific reservationpawstay_create_reservation_invoice — Create a new invoice for a reservationpawstay_preview_reservation_invoice — Preview the invoice for a reservation before creating itpawstay_list_reservation_notes — List all notes for a reservationpawstay_create_reservation_note — Add a note to a reservationpawstay_update_reservation_note — Update an existing reservation notepawstay_delete_reservation_note — Delete a reservation notepawstay_list_rooms — List all rooms for the current pet hotelpawstay_create_room — Create one or more roomspawstay_update_room — Update a roompawstay_delete_room — Delete a roompawstay_list_room_categories — List all room categoriespawstay_create_room_category — Create a new room categorypawstay_update_room_category — Update a room categorypawstay_delete_room_category — Delete a room categorypawstay_list_ledger_entries — List all ledger entries for a customerpawstay_get_ledger_balance — Get the current ledger balance for a customerpawstay_create_debit_entry — Create a debit ledger entry for a customerpawstay_create_payment_entry — Create a payment (credit) ledger entry for a customerpawstay_get_training_intake — Get the training intake for a reservationpawstay_create_training_intake — Create the training intake for a reservationpawstay_update_training_intake — Update the training intake for a reservationpawstay_list_training_sessions — List all training sessions for a reservationpawstay_get_training_session — Get a specific training session by IDpawstay_create_training_session — Create a new training session for a reservationpawstay_update_training_session — Update an existing training sessionpawstay_delete_training_session — Delete a training sessionpawstay_get_pet_training_history — Get a pet's full training history: all training intakes and sessions across every reservationpawstay_list_cash_flow_accounts — List all cash flow accounts (cash boxes / bank accounts) for the hotel, with current balances and this month's totalspawstay_get_cash_flow_account — Get a specific cash flow account by IDpawstay_create_cash_flow_account — Create a new cash flow account (cash box or bank account)pawstay_update_cash_flow_account — Update a cash flow account's name, type, IBAN, or active status (currency and opening_balance cannot be changed after creation)pawstay_list_cash_flow_entries — List income/expense entries for a cash flow account. Without page/per_page, returns every entry ever recorded on the account.pawstay_create_cash_flow_entry — Create a new income or expense entry on a cash flow accountpawstay_update_cash_flow_entry — Update a cash flow entry. Only possible within 2 minutes of creation — after that the backend rejects the changepawstay_delete_cash_flow_entry — Delete a cash flow entry. Only possible within 2 minutes of creation — after that the backend rejects the deletionpawstay_get_cash_flow_entry_history — Get the full audit history (creates, updates, deletes) of a cash flow entrypawstay_prepare_operation — Two-stage safety for critical operations: prepare (returns operation_id + exact proposed change, writes nothing). Then call pawstay_confirm_operation. Operation types: reservation.create, reservation.fire (check_in/check_out/cancel), reservation.reschedule, customer.destroy, pet.destroy, room.destroy, ledger.payment, ledger.debit, stay_pass.purchase, stay_pass.cancel. STAY PASS: stay_pass.purchase sells a package {customer_id, campaign_id}. stay_pass.cancel cancels one {purchase_id, reason, note?, refund_amount?}; reason is customer_request | refund_given | entered_in_error | other (other requires note); refund_amount is only a record, the system never calculates refunds, and it must be a JSON number (e.g. 5000): the server does not validate it and an invalid value silently becomes 0. Cancel is rejected with HTTP 409 (code conflict) while the package has reserved days: explain this to the user and offer to cancel or check out the related reservations first (see pawstay_get_stay_pass_customer_summary usages). A package with consumed days can be cancelled (history stays, remaining days become zero). An already-cancelled package or a state change between prepare and confirm ('Underlying state changed') also returns 409: re-prepare. Before reservation.create / reservation.reschedule for a customer who may have a package, call pawstay_get_stay_pass_quote; the proposal shows only the daily price, not package coverage. After any stay_pass.* or reservation.* operation re-read the reservation and pawstay_get_stay_pass_customer_summary (price and remaining days change on the server); the confirm result of stay_pass.* is only the raw purchase record without remaining_days or usages. For nights covered by a package, do not create payment or debit lines yourself; use the reservation's financial.total as the source of truth. Package purchases are NOT written to the customer ledger or cash flow, so never tell the user to record the payment separately.pawstay_confirm_operation — Confirm a prepared operation by operation_id. The PawStay API revalidates expiry, ownership, tenant and underlying state before executing. Critical writes MUST go through pawstay_prepare_operation -> pawstay_confirm_operation.pawstay_cancel_operation — Cancel a prepared operation by operation_id (user changed their mind before confirming).pawstay_list_stay_pass_campaigns — List stay pass (Konaklama Paketi) campaigns: prepaid discounted day packages the hotel sells. Optional active filter.pawstay_create_stay_pass_campaign — Create a stay pass campaign (e.g. 90 days for 90000 TL). Campaign management is not a financial transaction, so this is a direct call (no prepare/confirm). Selling a package to a customer is different: use pawstay_prepare_operation with stay_pass.purchase.pawstay_update_stay_pass_campaign — Update a stay pass campaign. Already-sold packages keep their original days and price (snapshot). Set active=false to stop selling it.pawstay_delete_stay_pass_campaign — Delete a stay pass campaign. A never-sold campaign is deleted (HTTP 204, empty body). A sold campaign cannot be deleted: it is deactivated instead and the record is returned (HTTP 200).pawstay_get_stay_pass_customer_summary — Get a customer's stay pass summary: totals (total/used/remaining days) and each purchase with status, expiry, reserved/consumed/remaining days, cancel info and per-reservation usages. Re-read this after any reservation or stay_pass operation: remaining days change on the server.pawstay_get_stay_pass_quote — Read-only preview of how many nights of a stay would be covered by the customer's stay passes (nights, covered_nights, uncovered_nights, allocations). Call this BEFORE creating or rescheduling a reservation for a customer who may have a package, and tell the user 'X nights come from the package, Y nights are charged normally'. The reservation prepare proposal only shows the daily price, not package coverage. When previewing a reschedule, pass reservation_id. Packages are used soonest-expiry first; if they run out, the remaining nights are charged at the normal daily price.pawstay_list_stay_pass_purchases — List stay pass purchases, optionally filtered by customer and status (active | cancelled).Anahtar olmadan (beklenen: "anahtar eksik" hatası):
curl -s -X POST https://mcp.pawstay.net/mcp -H "Content-Type: application/json" -H "Accept: application/json, text/event-stream" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
IntegrationAppAuditLog'a yazar — hangi anahtarın hangi isteği yaptığı izlenebilir. Anahtarınızı kimseyle paylaşmayın; sızarsa Pawstay panelinden yeniden oluşturun.