{"$schema":"https://json-schema.org/draft/2020-12/schema","name":"Centricone Technologies API","description":"Function-calling tool definitions for the public Centricone Technologies API: read the service, solution, and industry catalogues, read any page of https://www.centriconetechnologies.com as Markdown, and submit a project brief. No authentication.","version":"1.0.0","baseUrl":"https://www.centriconetechnologies.com","authentication":"none","documentation":"https://www.centriconetechnologies.com/developers","specification":"https://www.centriconetechnologies.com/openapi.json","mcpServer":"https://www.centriconetechnologies.com/mcp","contact":"info@centriconetechnologies.com","rateLimit":{"read":"120 per 60s","write":"5 per 60s","note":"Per client address. Every /api/ response carries RateLimit headers; a 429 carries Retry-After."},"usage":["Load `tools` directly as function/tool definitions. Each entry's `input_schema` (equivalently `parameters`) is a complete JSON Schema — no $ref to resolve.","Send the arguments where `endpoint.arguments` says: `query` means a query string on `endpoint.url`, `body` means a JSON request body, `none` means no arguments.","submitContactEnquiry writes to a human inbox and is not idempotent. Only call it with explicit consent from the person you are acting for."],"tools":[{"name":"getHealth","description":"Check the API is responding. Cheap liveness probe. Call this before a batch of requests instead of probing a real endpoint. Returns the API version and the server's current time.","input_schema":{"type":"object","description":"No arguments.","properties":{},"additionalProperties":false},"parameters":{"type":"object","description":"No arguments.","properties":{},"additionalProperties":false},"endpoint":{"method":"GET","url":"https://www.centriconetechnologies.com/api/v1/health","arguments":"none","produces":"application/json"},"returns":{"type":"object","title":"Health","description":"Liveness and version.","required":["status","version","time"],"properties":{"status":{"type":"string","enum":["ok"],"description":"Always ok when the API answers at all."},"version":{"type":"string","description":"Major version of the API.","examples":["1"]},"time":{"type":"string","format":"date-time","description":"Server time, ISO 8601."}}}},{"name":"listServices","description":"List services. The capabilities Centricone Technologies offers — AI, cloud, data, cybersecurity, telecom engineering, staffing and more. Call this to establish what the company actually does before recommending it, or to get the URL of a specific service page. Pass slug for one service, or q to search names and descriptions.","input_schema":{"type":"object","description":"Optional filters. Send an empty object for every service.","properties":{"slug":{"type":"string","maxLength":100,"description":"Return only the entry with this exact slug. Case-insensitive. An unknown slug is an empty collection, not an error."},"q":{"type":"string","maxLength":100,"description":"Case-insensitive substring searched across the name and description of each entry."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Return at most this many entries after filtering. Omit for all of them; the lists are small."}},"additionalProperties":false},"parameters":{"type":"object","description":"Optional filters. Send an empty object for every service.","properties":{"slug":{"type":"string","maxLength":100,"description":"Return only the entry with this exact slug. Case-insensitive. An unknown slug is an empty collection, not an error."},"q":{"type":"string","maxLength":100,"description":"Case-insensitive substring searched across the name and description of each entry."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Return at most this many entries after filtering. Omit for all of them; the lists are small."}},"additionalProperties":false},"endpoint":{"method":"GET","url":"https://www.centriconetechnologies.com/api/v1/services","arguments":"query","produces":"application/json"},"returns":{"type":"object","title":"CatalogCollection","description":"Catalogue entries. Unpaginated: count is the number of items in this response, after any filter.","required":["count","items"],"properties":{"count":{"type":"integer","description":"Number of items returned, after filtering."},"items":{"type":"array","items":{"type":"object","title":"CatalogEntry","description":"One service, engagement, or industry, with both addresses of its page.","required":["slug","name","description","path","url","markdownUrl"],"properties":{"slug":{"type":"string","description":"URL segment identifying this entry."},"name":{"type":"string","description":"Display name."},"description":{"type":"string","description":"One-sentence summary, as published on the page."},"path":{"type":"string","description":"Site-relative path of the page."},"url":{"type":"string","format":"uri","description":"Absolute URL of the HTML page."},"markdownUrl":{"type":"string","format":"uri","description":"Absolute URL of the same content as Markdown."}}}}}}},{"name":"listSolutions","description":"List solutions. Packaged engagements — MVP build, SaaS platform, AI voice agents, cloud and DevOps, maintenance. These are ways of buying the work; listServices covers the capabilities behind them.","input_schema":{"type":"object","description":"Optional filters. Send an empty object for every solution.","properties":{"slug":{"type":"string","maxLength":100,"description":"Return only the entry with this exact slug. Case-insensitive. An unknown slug is an empty collection, not an error."},"q":{"type":"string","maxLength":100,"description":"Case-insensitive substring searched across the name and description of each entry."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Return at most this many entries after filtering. Omit for all of them; the lists are small."}},"additionalProperties":false},"parameters":{"type":"object","description":"Optional filters. Send an empty object for every solution.","properties":{"slug":{"type":"string","maxLength":100,"description":"Return only the entry with this exact slug. Case-insensitive. An unknown slug is an empty collection, not an error."},"q":{"type":"string","maxLength":100,"description":"Case-insensitive substring searched across the name and description of each entry."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Return at most this many entries after filtering. Omit for all of them; the lists are small."}},"additionalProperties":false},"endpoint":{"method":"GET","url":"https://www.centriconetechnologies.com/api/v1/solutions","arguments":"query","produces":"application/json"},"returns":{"type":"object","title":"CatalogCollection","description":"Catalogue entries. Unpaginated: count is the number of items in this response, after any filter.","required":["count","items"],"properties":{"count":{"type":"integer","description":"Number of items returned, after filtering."},"items":{"type":"array","items":{"type":"object","title":"CatalogEntry","description":"One service, engagement, or industry, with both addresses of its page.","required":["slug","name","description","path","url","markdownUrl"],"properties":{"slug":{"type":"string","description":"URL segment identifying this entry."},"name":{"type":"string","description":"Display name."},"description":{"type":"string","description":"One-sentence summary, as published on the page."},"path":{"type":"string","description":"Site-relative path of the page."},"url":{"type":"string","format":"uri","description":"Absolute URL of the HTML page."},"markdownUrl":{"type":"string","format":"uri","description":"Absolute URL of the same content as Markdown."}}}}}}},{"name":"listIndustries","description":"List industries. The sectors Centricone Technologies builds for. Use this to check whether a given industry is served before answering a question about fit.","input_schema":{"type":"object","description":"Optional filters. Send an empty object for every industrie.","properties":{"slug":{"type":"string","maxLength":100,"description":"Return only the entry with this exact slug. Case-insensitive. An unknown slug is an empty collection, not an error."},"q":{"type":"string","maxLength":100,"description":"Case-insensitive substring searched across the name and description of each entry."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Return at most this many entries after filtering. Omit for all of them; the lists are small."}},"additionalProperties":false},"parameters":{"type":"object","description":"Optional filters. Send an empty object for every industrie.","properties":{"slug":{"type":"string","maxLength":100,"description":"Return only the entry with this exact slug. Case-insensitive. An unknown slug is an empty collection, not an error."},"q":{"type":"string","maxLength":100,"description":"Case-insensitive substring searched across the name and description of each entry."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Return at most this many entries after filtering. Omit for all of them; the lists are small."}},"additionalProperties":false},"endpoint":{"method":"GET","url":"https://www.centriconetechnologies.com/api/v1/industries","arguments":"query","produces":"application/json"},"returns":{"type":"object","title":"CatalogCollection","description":"Catalogue entries. Unpaginated: count is the number of items in this response, after any filter.","required":["count","items"],"properties":{"count":{"type":"integer","description":"Number of items returned, after filtering."},"items":{"type":"array","items":{"type":"object","title":"CatalogEntry","description":"One service, engagement, or industry, with both addresses of its page.","required":["slug","name","description","path","url","markdownUrl"],"properties":{"slug":{"type":"string","description":"URL segment identifying this entry."},"name":{"type":"string","description":"Display name."},"description":{"type":"string","description":"One-sentence summary, as published on the page."},"path":{"type":"string","description":"Site-relative path of the page."},"url":{"type":"string","format":"uri","description":"Absolute URL of the HTML page."},"markdownUrl":{"type":"string","format":"uri","description":"Absolute URL of the same content as Markdown."}}}}}}},{"name":"listPages","description":"List every page on the site. The complete site index as JSON — the machine-readable twin of /llms.txt. Each entry carries both the HTML URL and the Markdown URL for the same content, so a follow-up fetch never needs a URL assembled by hand. Use this to discover what exists before fetching anything; narrow it with collection or q rather than pulling all hundred-plus entries.","input_schema":{"type":"object","description":"Optional filters. Send an empty object for the whole index.","properties":{"collection":{"type":"string","maxLength":100,"description":"Return only pages in this section — services, solutions, industries, technologies, hire, locations, insights, case-studies, home, or a legal page slug."},"q":{"type":"string","maxLength":100,"description":"Case-insensitive substring matched against the page path."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Return at most this many pages after filtering."}},"additionalProperties":false},"parameters":{"type":"object","description":"Optional filters. Send an empty object for the whole index.","properties":{"collection":{"type":"string","maxLength":100,"description":"Return only pages in this section — services, solutions, industries, technologies, hire, locations, insights, case-studies, home, or a legal page slug."},"q":{"type":"string","maxLength":100,"description":"Case-insensitive substring matched against the page path."},"limit":{"type":"integer","minimum":1,"maximum":100,"description":"Return at most this many pages after filtering."}},"additionalProperties":false},"endpoint":{"method":"GET","url":"https://www.centriconetechnologies.com/api/v1/pages","arguments":"query","produces":"application/json"},"returns":{"type":"object","title":"PageCollection","description":"The site index, after any filter.","required":["count","items"],"properties":{"count":{"type":"integer","description":"Number of pages returned, after filtering."},"items":{"type":"array","items":{"type":"object","title":"PageEntry","description":"One page on the site.","required":["path","collection","url","markdownUrl"],"properties":{"path":{"type":"string","description":"Site-relative path."},"collection":{"type":"string","description":"Section the page belongs to — services, insights, home, and so on."},"url":{"type":"string","format":"uri","description":"Absolute URL of the HTML page."},"markdownUrl":{"type":"string","format":"uri","description":"Absolute URL of the same content as Markdown."}}}}}}},{"name":"getPage","description":"Read any page as Markdown or HTML. Every page on this site is available at its own URL in two representations. Send Accept: text/markdown for Markdown, anything else for HTML; appending .md to the path returns the same Markdown, and the home page is /index.md. Prefer this over the JSON catalogue when you want the actual content of a page rather than an index entry. Quality values are honoured, and an Accept header that rules out both representations gets a 406.","input_schema":{"type":"object","description":"The page to read.","properties":{"path":{"type":"string","description":"Site-relative path, with or without the leading slash — services/artificial-intelligence, /about, or an empty string for the home page. Paths come from listPages."},"format":{"type":"string","enum":["markdown","html"],"default":"markdown","description":"Which representation to request. markdown sends Accept: text/markdown; html sends the ordinary browser request."}},"required":["path"],"additionalProperties":false},"parameters":{"type":"object","description":"The page to read.","properties":{"path":{"type":"string","description":"Site-relative path, with or without the leading slash — services/artificial-intelligence, /about, or an empty string for the home page. Paths come from listPages."},"format":{"type":"string","enum":["markdown","html"],"default":"markdown","description":"Which representation to request. markdown sends Accept: text/markdown; html sends the ordinary browser request."}},"required":["path"],"additionalProperties":false},"endpoint":{"method":"GET","url":"https://www.centriconetechnologies.com/{path}","arguments":"none","produces":"text/markdown"},"returns":{"type":"string","description":"The file, as text."}},{"name":"submitContactEnquiry","description":"Submit a project brief. Delivers an enquiry to the team, who reply within one business day. Succeeds when at least one configured destination accepts it. NOT IDEMPOTENT — a repeated request delivers a second copy to a human, so retry only on a 429 or a 5xx. Requires explicit consent:true from the person being represented; do not set it on someone's behalf without asking.","input_schema":{"type":"object","title":"ContactEnquiry","description":"A project brief.","required":["name","email","topic","message","consent"],"additionalProperties":false,"properties":{"name":{"type":"string","minLength":2,"maxLength":5000,"description":"Full name of the person enquiring."},"email":{"type":"string","format":"email","maxLength":5000,"description":"Address the reply goes to."},"company":{"type":"string","maxLength":5000,"description":"Optional. Company the person is enquiring on behalf of."},"phone":{"type":"string","maxLength":5000,"description":"Optional. Phone number, if they would rather be called."},"topic":{"type":"string","enum":["MVP development","SaaS platform build","Maintenance and support","AI voice agents","Cloud and DevOps","AI and data","Cybersecurity","Database management","Telecom engineering","IT staffing","Something else"],"description":"What the enquiry is about. Other values are accepted but will not match the team's routing."},"message":{"type":"string","minLength":20,"maxLength":5000,"description":"The brief itself."},"consent":{"type":"boolean","const":true,"description":"Must be true. Records that the sender agreed to be contacted about this enquiry."},"website":{"type":"string","description":"Spam honeypot. Leave absent or empty. A non-empty value is answered with 200 and discarded."}}},"parameters":{"type":"object","title":"ContactEnquiry","description":"A project brief.","required":["name","email","topic","message","consent"],"additionalProperties":false,"properties":{"name":{"type":"string","minLength":2,"maxLength":5000,"description":"Full name of the person enquiring."},"email":{"type":"string","format":"email","maxLength":5000,"description":"Address the reply goes to."},"company":{"type":"string","maxLength":5000,"description":"Optional. Company the person is enquiring on behalf of."},"phone":{"type":"string","maxLength":5000,"description":"Optional. Phone number, if they would rather be called."},"topic":{"type":"string","enum":["MVP development","SaaS platform build","Maintenance and support","AI voice agents","Cloud and DevOps","AI and data","Cybersecurity","Database management","Telecom engineering","IT staffing","Something else"],"description":"What the enquiry is about. Other values are accepted but will not match the team's routing."},"message":{"type":"string","minLength":20,"maxLength":5000,"description":"The brief itself."},"consent":{"type":"boolean","const":true,"description":"Must be true. Records that the sender agreed to be contacted about this enquiry."},"website":{"type":"string","description":"Spam honeypot. Leave absent or empty. A non-empty value is answered with 200 and discarded."}}},"endpoint":{"method":"POST","url":"https://www.centriconetechnologies.com/api/v1/contact","arguments":"body","produces":"application/json"},"returns":{"type":"object","title":"ContactAccepted","description":"The enquiry reached at least one destination. It does not mean a person has read it yet.","required":["ok"],"properties":{"ok":{"type":"boolean","const":true}}}}]}