{
	"$schema": "https://modelcontextprotocol.io/schemas/2025-11-25/server-card.json",
	"schemaVersion": "2025-11-25",
	"name": "io.estetrainingacademy/catalogue",
	"title": "Este Training Academy Course Catalogue",
	"description": "Read-only access to the accredited aesthetics, injectable and beauty therapy courses taught by Este Training Academy in Birmingham, UK: course details, levels, durations, categories, accreditations and how to enquire.",
	"version": "1.0.0",
	"websiteUrl": "https://www.estetrainingacademy.com",
	"documentationUrl": "https://www.estetrainingacademy.com/developers",
	"icons": [
		{
			"src": "https://www.estetrainingacademy.com/favicon.ico",
			"sizes": "48x48",
			"mimeType": "image/x-icon"
		}
	],
	"publisher": {
		"name": "Este Training Academy",
		"url": "https://www.estetrainingacademy.com",
		"contact": "https://www.estetrainingacademy.com/contact"
	},
	"capabilities": {
		"tools": { "listChanged": false },
		"resources": { "subscribe": false, "listChanged": false }
	},
	"authentication": {
		"type": "none",
		"documentation": "https://www.estetrainingacademy.com/auth.md"
	},
	"tools": [
		{
			"name": "search_courses",
			"title": "Search courses",
			"description": "Search the Este Training Academy catalogue of 15 accredited courses by free-text query, level or category. Returns matching course titles, levels, durations, locations and canonical URLs. Read-only; never returns prices because fees are quoted on enquiry.",
			"inputSchema": {
				"type": "object",
				"properties": {
					"query": {
						"type": "string",
						"description": "Free-text search over course titles and summaries, for example 'dermal filler' or 'laser'."
					},
					"level": {
						"type": "string",
						"enum": ["Introduction", "Intermediate", "Advanced"],
						"description": "Filter by difficulty level of the course."
					},
					"category": {
						"type": "string",
						"enum": [
							"aesthetics",
							"medical-injectable",
							"beauty-therapy-courses-birmingham",
							"vtct-courses",
							"laser-skin-rejuvenation",
							"phlebotomy-iv-therapy"
						],
						"description": "Filter by category slug."
					},
					"limit": {
						"type": "integer",
						"minimum": 1,
						"maximum": 15,
						"default": 10,
						"description": "Maximum number of courses to return."
					}
				},
				"additionalProperties": false
			},
			"annotations": {
				"title": "Search courses",
				"readOnlyHint": true,
				"destructiveHint": false,
				"idempotentHint": true,
				"openWorldHint": false
			}
		},
		{
			"name": "get_course",
			"title": "Get course detail",
			"description": "Return the full published detail for one Este Training Academy course identified by its slug: summary, level, duration, locations, categories, accreditation and canonical page URL.",
			"inputSchema": {
				"type": "object",
				"properties": {
					"slug": {
						"type": "string",
						"pattern": "^[a-z0-9-]+$",
						"description": "Course slug, for example 'pdo-thread-course'."
					}
				},
				"required": ["slug"],
				"additionalProperties": false
			},
			"annotations": {
				"title": "Get course detail",
				"readOnlyHint": true,
				"destructiveHint": false,
				"idempotentHint": true,
				"openWorldHint": false
			}
		},
		{
			"name": "recommend_course",
			"title": "Recommend a starting course",
			"description": "Suggest the most suitable Este Training Academy course for a learner, given their background and goal. Returns a ranked shortlist with the reason for each suggestion and the canonical course URL.",
			"inputSchema": {
				"type": "object",
				"properties": {
					"background": {
						"type": "string",
						"enum": ["beginner", "beauty-therapist", "medical-professional", "already-injecting"],
						"description": "The learner's current experience level."
					},
					"goal": {
						"type": "string",
						"description": "What the learner wants to be able to do, for example 'offer dermal fillers'."
					}
				},
				"required": ["background"],
				"additionalProperties": false
			},
			"annotations": {
				"title": "Recommend a starting course",
				"readOnlyHint": true,
				"destructiveHint": false,
				"idempotentHint": true,
				"openWorldHint": false
			}
		},
		{
			"name": "start_enquiry",
			"title": "Open the enquiry form",
			"description": "Hand the user off to the Este Training Academy enquiry form, pre-selecting a course if one is supplied. Enrolment and fees are handled by a human admissions team; this tool never submits a booking or takes payment.",
			"inputSchema": {
				"type": "object",
				"properties": {
					"courseSlug": {
						"type": "string",
						"pattern": "^[a-z0-9-]+$",
						"description": "Optional course slug to preselect in the enquiry form."
					}
				},
				"additionalProperties": false
			},
			"annotations": {
				"title": "Open the enquiry form",
				"readOnlyHint": true,
				"destructiveHint": false,
				"idempotentHint": true,
				"openWorldHint": true
			}
		}
	],
	"resources": [
		{
			"uri": "https://www.estetrainingacademy.com/api/courses.json",
			"name": "courses",
			"title": "Course catalogue",
			"description": "All 15 published courses with level, duration, categories, locations and canonical URLs.",
			"mimeType": "application/json"
		},
		{
			"uri": "https://www.estetrainingacademy.com/api/categories.json",
			"name": "categories",
			"title": "Course categories",
			"description": "The six course categories with slugs, descriptions and course counts.",
			"mimeType": "application/json"
		},
		{
			"uri": "https://www.estetrainingacademy.com/api/organization.json",
			"name": "organization",
			"title": "Organisation profile",
			"description": "Legal name, address, phone, accreditations, social profiles and pricing model.",
			"mimeType": "application/json"
		},
		{
			"uri": "https://www.estetrainingacademy.com/llms-full.txt",
			"name": "knowledge-base",
			"title": "Full knowledge base",
			"description": "Long-form plain-text knowledge base covering every course, category, policy and FAQ.",
			"mimeType": "text/plain"
		}
	],
	"errorModel": {
		"description": "Tool errors are returned as MCP tool results with isError true and a human-readable message naming the invalid argument and the allowed values.",
		"codes": [
			{ "code": "invalid_argument", "meaning": "An argument failed its JSON Schema, for example an unknown course slug." },
			{ "code": "not_found", "meaning": "No published course matches the supplied slug." },
			{ "code": "unsupported", "meaning": "The request asks for data we do not publish, such as a course fee." }
		]
	}
}
