TCC Group MCP
A read-only MCP server operated by TCC Group that allows AI assistants to search, read, and access content from the tcc.group website, including pages, posts, navigation, and contact details, without requiring an account or sign-in.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.tcc.groupWhat its tools do
18 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (18)
get_site_infolist_pageslist_postslist_taxonomy_termssearch_contentget_page_content_with_schemasearch_enriched_page_contextsget_citation_linksget_schema_contextget_navigationget_team_directoryget_person_profilesearch_media_assetssearch_documentsget_documentget_contact_optionsget_document_carouselget_contact_card
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to tcc.group ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Search and read website pages and posts
- Access navigation and contact details
- Retrieve published content for AI assistants
Source and maintenance
Protocol and capabilities
- Server
- TCC MCP Server 1.3.0
- MCP protocol negotiated in check
- 2025-03-26
- Tools
- 18 advertised
- Resources
- 4 advertised
- Resource templates
- 5 advertised
- Prompts
- 2 advertised
{
"tools": {
"listChanged": true
},
"logging": {},
"prompts": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
18 advertised
get_site_info — Get site information
Get site metadata and MCP server capabilities.
{
"type": "object",
"properties": {}
}{
"title": "Get site information",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_pages — List pages
List published WordPress pages with pagination.
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 500,
"minimum": 1,
"description": "Integer value."
},
"per_page": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Integer value."
}
}
}{
"title": "List pages",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_posts — List posts, insights and case studies
List published posts, insights, or case studies, optionally filtered by taxonomy.
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 500,
"minimum": 1,
"description": "Integer value."
},
"term": {
"type": "string",
"description": "Optional taxonomy term slug."
},
"type": {
"enum": [
"post",
"insight",
"case-study"
],
"type": "string",
"default": "post",
"description": "The public post type to query."
},
"per_page": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Integer value."
},
"taxonomy": {
"enum": [
"category",
"post_tag",
"sector",
"solution"
],
"type": "string",
"description": "Optional taxonomy filter."
}
}
}{
"title": "List posts, insights and case studies",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_taxonomy_terms — List taxonomy terms
List published taxonomy terms with counts.
{
"type": "object",
"properties": {
"taxonomy": {
"enum": [
"category",
"post_tag",
"sector",
"solution"
],
"type": "string",
"default": "category",
"description": "The taxonomy to enumerate."
}
}
}{
"title": "List taxonomy terms",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_content — Search site content
Search public pages, posts, insights, and case studies.
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "Search phrase."
},
"per_page": {
"type": "integer",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Integer value."
}
}
}{
"title": "Search site content",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_page_content_with_schema — Get page content and schema
Get full page textual content and published JSON-LD schema for grounded evaluation.
{
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "Absolute page URL."
},
"slug": {
"type": "string",
"description": "Page slug or path (for example: redress-and-remediation)."
},
"page_id": {
"type": "integer",
"default": 0,
"maximum": 99999999,
"minimum": 1,
"description": "Integer value."
}
}
}{
"title": "Get page content and schema",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_enriched_page_contexts — Search enriched page contexts
Search site content and return top matching page contexts enriched with full text and JSON-LD schema.
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "Search phrase."
},
"top_n": {
"type": "integer",
"default": 3,
"maximum": 10,
"minimum": 1,
"description": "Integer value."
},
"per_page": {
"type": "integer",
"default": 15,
"maximum": 50,
"minimum": 1,
"description": "Integer value."
}
}
}{
"title": "Search enriched page contexts",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_citation_links — Get citation links
Return clean source links and markdown citation bullets for a query context.
{
"type": "object",
"required": [
"query"
],
"properties": {
"query": {
"type": "string",
"maxLength": 200,
"minLength": 2,
"description": "Search phrase used to collect source links."
},
"top_n": {
"type": "integer",
"default": 5,
"maximum": 10,
"minimum": 1,
"description": "Integer value."
},
"per_page": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Integer value."
}
}
}{
"title": "Get citation links",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_schema_context — Get organisation schema context
Return the sitewide Organization schema context.
{
"type": "object",
"properties": {}
}{
"title": "Get organisation schema context",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_navigation — Get site navigation
Return the primary navigation structure.
{
"type": "object",
"properties": {}
}{
"title": "Get site navigation",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_team_directory — Get team directory
Get the published, featured team member directory (Core-managed People profiles). Read-only and published-only, like every other tool.
{
"type": "object",
"properties": {}
}{
"title": "Get team directory",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_person_profile — Get team member profile
Get one published team member profile and its schema.org Person JSON-LD by slug.
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "The person's slug: the fragment of their url in get_team_directory, such as jane-example in /meet-the-team/#jane-example."
}
}
}{
"title": "Get team member profile",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_media_assets — Search media assets
Search public, active Core-managed Media Assets eligible for this website and return safe delivery variants plus schema.org MediaObject JSON-LD. Private and management records are never returned.
{
"type": "object",
"properties": {
"kind": {
"enum": [
"image",
"video",
"audio",
"document",
"other"
],
"type": "string",
"description": "Optional kind of asset to return; every kind when omitted."
},
"query": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Optional asset title or description search phrase."
},
"cursor": {
"type": "string",
"maxLength": 2000,
"description": "Optional opaque cursor returned by the previous page."
},
"page_size": {
"type": "integer",
"default": 20,
"maximum": 50,
"minimum": 1,
"description": "Integer value."
}
}
}{
"title": "Search media assets",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}search_documents — Search documents
Search the public documents (PDF files) that this website publishes and return each as a document card with its schema.org node. Filter by topic or sector (slugs), by the address of a page on this website to find the documents related to it, or search by phrase. Call get_document to open one document by its id. Only published, open documents appear, and none may be available.
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 5,
"maximum": 10,
"minimum": 1,
"description": "Integer value."
},
"query": {
"type": "string",
"maxLength": 200,
"description": "Optional search phrase."
},
"topic": {
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
"maxLength": 80,
"description": "Optional topic slug."
},
"sector": {
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
"maxLength": 80,
"description": "Optional sector slug."
},
"page_url": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "Optional address of a page on this website: only documents related to that page are returned."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"schemaVersion",
"available",
"reasonCode",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"card",
"schemaOrg"
],
"properties": {
"card": {
"type": "object",
"description": "The document's DocumentCard v1: its id, title, summary, file, preview image, page and contact addresses and the rest of the contract (ADR-002). Its id is the id that get_document and get_document_carousel take."
},
"links": {
"type": "object",
"description": "The card's page and contact addresses with the campaign parameters of this surface."
},
"schemaOrg": {
"type": "object",
"description": "The card's schema.org node."
},
"matchedFields": {
"type": "array",
"items": {
"type": "string"
}
},
"semanticConfidence": {
"type": "number",
"maximum": 1,
"minimum": 0
}
}
},
"description": "The documents, each as a card."
},
"message": {
"type": "string",
"description": "Why there are no documents, in plain words, when there are none."
},
"available": {
"type": "boolean",
"description": "False when the documents cannot be read now (reasonCode says why); true for every other answer, one with no documents included."
},
"reasonCode": {
"type": "string",
"description": "A stable code that says why the documents cannot be read, and an empty string when they can."
},
"schemaVersion": {
"type": "integer",
"description": "The version of the shape of this answer: 1."
}
}
}{
"title": "Search documents",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_document — Get document
Get one public document card, with its schema.org node, by the id that search_documents returns. A document that does not exist or is not published for this website returns the same not-found answer.
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
"description": "The document id."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"schemaVersion",
"available",
"reasonCode",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"card",
"schemaOrg"
],
"properties": {
"card": {
"type": "object",
"description": "The document's DocumentCard v1: its id, title, summary, file, preview image, page and contact addresses and the rest of the contract (ADR-002). Its id is the id that get_document and get_document_carousel take."
},
"links": {
"type": "object",
"description": "The card's page and contact addresses with the campaign parameters of this surface."
},
"schemaOrg": {
"type": "object",
"description": "The card's schema.org node."
},
"matchedFields": {
"type": "array",
"items": {
"type": "string"
}
},
"semanticConfidence": {
"type": "number",
"maximum": 1,
"minimum": 0
}
}
},
"description": "The documents, each as a card."
},
"message": {
"type": "string",
"description": "Why there are no documents, in plain words, when there are none."
},
"available": {
"type": "boolean",
"description": "False when the documents cannot be read now (reasonCode says why); true for every other answer, one with no documents included."
},
"reasonCode": {
"type": "string",
"description": "A stable code that says why the documents cannot be read, and an empty string when they can."
},
"schemaVersion": {
"type": "integer",
"description": "The version of the shape of this answer: 1."
}
}
}{
"title": "Get document",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_contact_options — Get contact options
Get how a person can contact this organisation: the address of its contact page, the enquiry routes that page offers, and the email address, telephone number and office hours the site publishes. Use it when a person asks how to get in touch. A fact the site does not publish is left out, and hours and routes are stated as the site publishes them, not as a promise of availability or of a response time. Takes no arguments, accepts no personal data and sends nothing: the person completes any enquiry on the contact page themselves.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"required": [
"schemaVersion"
],
"properties": {
"name": {
"type": "string",
"description": "The name of the organisation."
},
"email": {
"type": "string"
},
"sources": {
"type": "array",
"items": {
"type": "object"
}
},
"telephone": {
"type": "string"
},
"contactPage": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The address of the contact page, the address a person is handed to."
},
"title": {
"type": "string"
}
}
},
"officeHours": {
"type": "array",
"items": {
"type": "object",
"required": [
"days",
"opens",
"closes"
],
"properties": {
"days": {
"type": "string"
},
"opens": {
"type": "string"
},
"closes": {
"type": "string"
}
}
}
},
"sourceLinks": {
"type": "array",
"items": {
"type": "object"
}
},
"enquiryRoutes": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
},
"schemaVersion": {
"type": "integer",
"description": "The version of the shape of this answer: 1."
},
"citationGuidance": {
"type": "string"
},
"sourceLinksMarkdown": {
"type": "string"
},
"citationRenderInstruction": {
"type": "string"
}
}
}{
"title": "Get contact options",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_document_carousel — Show documents as cards
Use this when a person wants to see documents that search_documents or get_document returned: it shows up to three of them as a carousel of cards, each with the document's title, summary, size, number of pages and preview image, a button that opens the PDF and a link to contact the organisation. Pass the id of each document to show, taken from the id of its card, at most three. A document that is not published for this website is left out, and when none can be shown the answer is the one get_document gives for a document that is not found. Do not use it to find documents: call search_documents for that. A client that does not show cards receives the same answer as text.
{
"type": "object",
"required": [
"ids"
],
"properties": {
"ids": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
},
"maxItems": 3,
"minItems": 1,
"description": "The id of each document to show, as search_documents and get_document give it: at most three."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"schemaVersion",
"available",
"reasonCode",
"items"
],
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"card",
"schemaOrg"
],
"properties": {
"card": {
"type": "object",
"description": "The document's DocumentCard v1: its id, title, summary, file, preview image, page and contact addresses and the rest of the contract (ADR-002). Its id is the id that get_document and get_document_carousel take."
},
"links": {
"type": "object",
"description": "The card's page and contact addresses with the campaign parameters of this surface."
},
"schemaOrg": {
"type": "object",
"description": "The card's schema.org node."
},
"matchedFields": {
"type": "array",
"items": {
"type": "string"
}
},
"semanticConfidence": {
"type": "number",
"maximum": 1,
"minimum": 0
}
}
},
"description": "The documents, each as a card."
},
"message": {
"type": "string",
"description": "Why there are no documents, in plain words, when there are none."
},
"available": {
"type": "boolean",
"description": "False when the documents cannot be read now (reasonCode says why); true for every other answer, one with no documents included."
},
"reasonCode": {
"type": "string",
"description": "A stable code that says why the documents cannot be read, and an empty string when they can."
},
"schemaVersion": {
"type": "integer",
"description": "The version of the shape of this answer: 1."
}
}
}{
"title": "Show documents as cards",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_contact_card — Show contact options as a card
Use this when a person asks how to get in touch with this organisation and would like to see it as a card: it shows the same facts as get_contact_options, which are the address of its contact page, the enquiry routes that page offers, and the email address, telephone number and office hours the site publishes, with a button that opens the contact page. A fact the site does not publish is left out, and hours and routes are stated as the site publishes them, not as a promise of availability or of a response time. Takes no arguments, accepts no personal data and sends nothing: the person completes any enquiry on the contact page themselves. A client that does not show cards receives the same answer as text.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"required": [
"schemaVersion"
],
"properties": {
"name": {
"type": "string",
"description": "The name of the organisation."
},
"email": {
"type": "string"
},
"sources": {
"type": "array",
"items": {
"type": "object"
}
},
"telephone": {
"type": "string"
},
"contactPage": {
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The address of the contact page, the address a person is handed to."
},
"title": {
"type": "string"
}
}
},
"officeHours": {
"type": "array",
"items": {
"type": "object",
"required": [
"days",
"opens",
"closes"
],
"properties": {
"days": {
"type": "string"
},
"opens": {
"type": "string"
},
"closes": {
"type": "string"
}
}
}
},
"sourceLinks": {
"type": "array",
"items": {
"type": "object"
}
},
"enquiryRoutes": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
},
"schemaVersion": {
"type": "integer",
"description": "The version of the shape of this answer: 1."
},
"citationGuidance": {
"type": "string"
},
"sourceLinksMarkdown": {
"type": "string"
},
"citationRenderInstruction": {
"type": "string"
}
}
}{
"title": "Show contact options as a card",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
2 advertised
discover_site_structure
Guide the model to inspect site info, navigation, and taxonomy terms.
find_topic_content
Guide the model to search the public site for a topic.
- query
- The topic or phrase to search for. (required)
Resources
4 advertised
Site Info
Site metadata and supported capabilities.
tcc://site-infoPrimary Navigation
The main site navigation structure.
tcc://navigationOrganization Schema
Organization JSON-LD context.
tcc://schema-contextDocument and contact cards
The card view that get_document_carousel and get_contact_card show: an HTML view for a host that renders MCP Apps.
ui://tcc-mcp/cards-v1.htmlPages
Paginated published pages.
tcc://pages{?page,per_page}Posts
Filtered public posts, insights, and case studies.
tcc://posts{?type,page,per_page,taxonomy,term}Taxonomy Terms
Taxonomy listings with counts.
tcc://taxonomy-terms{?taxonomy}Search Results
Search public site content.
tcc://search{?q,per_page}Documents
Public document cards, filtered by topic, sector, related page or search phrase.
tcc://documents{?topic,sector,page_url,query}90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 2562 ms
- 95th percentile latency
- 2562 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 2562 ms · metadata changed · 18 tool(s), 4 resource(s), 5 resource template(s), 2 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http tcc-group-mcp https://mcp.tcc.groupCodex
codex mcp add tcc-group-mcp --url https://mcp.tcc.groupCursor
{
"mcpServers": {
"tcc-group-mcp": {
"url": "https://mcp.tcc.group"
}
}
}Cline
{
"mcpServers": {
"tcc-group-mcp": {
"type": "streamableHttp",
"url": "https://mcp.tcc.group",
"disabled": false
}
}
}VS Code
{
"servers": {
"tcc-group-mcp": {
"type": "http",
"url": "https://mcp.tcc.group"
}
}
}Gemini CLI
gemini mcp add --transport http tcc-group-mcp https://mcp.tcc.groupClaude Desktop
https://mcp.tcc.groupWindsurf
{
"mcpServers": {
"tcc-group-mcp": {
"serverUrl": "https://mcp.tcc.group"
}
}
}Let your agent find its tools
Find servers like TCC Group MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other documentation and reference servers
Do you run TCC Group MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.