For Developers
MCP Tools Documentation
Connect an AI assistant to The Canine Coach. The server speaks the Model Context Protocol over HTTP and is protected by OAuth, so every call runs as a signed-in user.
Machine-readable specs
Two public documents describe the exact request and response formats. Both are served as JSON with CORS enabled, so tooling can fetch them directly — no token required.
- /api/public/mcp/openapi.json — OpenAPI 3.1 description of the JSON-RPC endpoint, with per-tool request examples and the OAuth security scheme.
- /api/public/mcp/schema.json — JSON Schema for every tool's arguments and its
structuredContentresult.
curl https://canine-coach-elevate.lovable.app/api/public/mcp/openapi.jsonEndpoint
All traffic goes to a single Streamable HTTP endpoint. Every request must be a POST that accepts both JSON and SSE, and must carry an OAuth bearer token.
POST https://canine-coach-elevate.lovable.app/mcp
Authorization: Bearer <access token>
Content-Type: application/json
Accept: application/json, text/event-streamAuthentication
The server is an OAuth 2.1 resource server. Point your client at the endpoint and it will discover the authorization server automatically, register itself, and walk you through sign-in and an approval screen. Clients that support MCP — Claude, ChatGPT, Cursor, Codex — handle this for you; just add the URL above as a custom connector.
A request without a valid token is rejected before any tool runs:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="mcp",
resource_metadata="https://canine-coach-elevate.lovable.app/.well-known/oauth-protected-resource"
{ "error": "unauthorized" }Pasting a browser session token will not work — tokens must come from the OAuth flow.
Listing the tools
curl -X POST https://canine-coach-elevate.lovable.app/mcp \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{ "jsonrpc": "2.0", "id": 0, "method": "tools/list" }'Returns the four tools below. All of them are read-only and safe to call repeatedly.
List training programs
list_services
Returns every Canine Coach training program with its slug, name, page path, summary, and who it is best for.
Input: None.
Example request
curl -X POST https://canine-coach-elevate.lovable.app/mcp \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": { "name": "list_services", "arguments": {} }
}'Expected response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "[ { \"slug\": \"puppy-training\", \"name\": \"Puppy Training\", ... } ]"
}
],
"structuredContent": {
"services": [
{
"slug": "puppy-training",
"name": "Puppy Training",
"path": "/puppy-training",
"summary": "Foundation work for puppies from eight weeks old...",
"bestFor": "New puppies and young dogs who need a confident, well-socialized start."
}
]
}
}
}Get a training program
get_service
Returns full details for one program, looked up by slug. An unknown slug returns a tool error listing the valid slugs.
Input: slug (string, required) — e.g. puppy-training, obedience-training, dog-nanny.
Example request
curl -X POST https://canine-coach-elevate.lovable.app/mcp \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_service",
"arguments": { "slug": "puppy-training" }
}
}'Expected response
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [{ "type": "text", "text": "{ \"slug\": \"puppy-training\", ... }" }],
"structuredContent": {
"service": {
"slug": "puppy-training",
"name": "Puppy Training",
"path": "/puppy-training",
"summary": "Foundation work for puppies from eight weeks old: socialization, house training, crate comfort, bite inhibition, leash introduction, and early manners built on trust rather than repetition drills.",
"bestFor": "New puppies and young dogs who need a confident, well-socialized start."
}
}
}
}Search the FAQ
search_faq
Keyword search across the published FAQ. Returns the matching question-and-answer pairs.
Input: query (string, required) — e.g. cost, consultation, reactive.
Example request
curl -X POST https://canine-coach-elevate.lovable.app/mcp \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "search_faq",
"arguments": { "query": "cost" }
}
}'Expected response
{
"jsonrpc": "2.0",
"id": 3,
"result": {
"content": [{ "type": "text", "text": "[ { \"question\": \"How much does training cost?\", ... } ]" }],
"structuredContent": {
"results": [
{
"question": "How much does training cost?",
"answer": "Pricing depends on the program that best fits your goals and your dog's needs. During the free consultation Susan recommends a personalized plan and explains the investment before you decide anything."
}
]
}
}
}Get contact and booking info
get_contact_info
Returns the practice's contact details, service area, hours, and how to book the free consultation.
Input: None.
Example request
curl -X POST https://canine-coach-elevate.lovable.app/mcp \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": { "name": "get_contact_info", "arguments": {} }
}'Expected response
{
"jsonrpc": "2.0",
"id": 4,
"result": {
"content": [{ "type": "text", "text": "{ \"business\": \"The Canine Coach\", ... }" }],
"structuredContent": {
"contact": {
"business": "The Canine Coach",
"trainer": "Susan Hawk",
"method": "The Relationship First Method\u2122",
"email": "hello@thecaninecoachnm.com",
"phone": "505-887-DOGS (3647)",
"location": "Albuquerque, New Mexico",
"serviceArea": "Albuquerque, Rio Rancho, Corrales, Santa Fe, surrounding communities, and select East Mountains areas",
"hours": "By appointment, Tuesday\u2013Saturday",
"website": "https://canine-coach-elevate.lovable.app",
"consultation": "Free one-hour in-home consultation"
}
}
}
}Errors
Tool-level problems come back as a normal result with isError set, so the assistant can recover. For example, an unknown program slug:
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [
{
"type": "text",
"text": "No program with slug \"puppies\". Available: puppy-training, obedience-training, behavior-modification, off-leash-training, in-home-training, dog-nanny"
}
],
"isError": true
}
}