PCFHub
What this MCP does
Searches and documents Power Apps PCF controls, provides installation and configuration content, and validates pcfhub.json manifests.
Tools
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'The control\'s slug, e.g. "pcf-tag-list".'}, 'version': {'type': 'string', 'description': 'A specific release. Defaults to the latest stable one.'}, 'include_related': {'type': 'boolean', 'description': 'Also return similar controls. Costs an extra query; leave off unless needed.'}, 'include_versions': {'type': 'boolean', 'description': 'Also return every release. Costs an extra query; leave off unless needed.'}}}
Output schema
{'type': 'object', 'required': ['slug', 'name', 'controlType', 'hosts', 'isArchived', 'downloads', 'url'], 'properties': {'url': {'type': 'string', 'description': "Absolute URL of the control's page, for citing."}, 'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'tags': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}}, 'tier': {'type': 'string', 'description': 'free, or a paid tier.'}, 'hosts': {'type': 'array', 'items': {'enum': ['canvas', 'model-driven'], 'type': 'string'}, 'description': 'Where this control runs: canvas apps, model-driven apps, or both.'}, 'author': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}, 'isVerified': {'type': 'boolean'}, 'githubLogin': {'type': ['string', 'null']}}}, 'related': {'type': 'array', 'description': 'Empty unless include_related was set.'}, 'tagline': {'type': ['string', 'null']}, 'category': {'type': 'object', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string'}}}, 'versions': {'type': 'array', 'description': 'Empty unless include_versions was set.'}, 'downloads': {'type': 'array', 'items': {'type': 'object', 'required': ['kind', 'label', 'fileName', 'requiresEntitlement', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Absolute URL of the counted download route. Use this rather than any storage URL.'}, 'kind': {'type': 'string', 'description': 'managed_solution or unmanaged_solution.'}, 'size': {'type': ['string', 'null'], 'description': 'Human-readable, e.g. "14.8 KB".'}, 'label': {'type': 'string'}, 'fileName': {'type': 'string'}, 'requiresEntitlement': {'type': 'boolean', 'description': 'True where the file is paid for and the download needs an entitlement.'}}}, 'description': 'Empty where the control has no published release.'}, 'summaryMd': {'type': ['string', 'null'], 'description': "The author's longer description, as Markdown."}, 'isArchived': {'type': 'boolean', 'description': 'True when the control is no longer maintained.'}, 'supportUrl': {'type': ['string', 'null'], 'description': 'Where to report a problem with the control.'}, 'controlType': {'type': 'string'}, 'homepageUrl': {'type': ['string', 'null']}, 'licenseSpdx': {'type': ['string', 'null'], 'description': 'SPDX identifier, e.g. "MIT".'}, 'publishedAt': {'type': ['string', 'null'], 'description': 'ISO 8601.'}, 'downloadCount': {'type': 'integer'}, 'repositoryUrl': {'type': ['string', 'null']}, 'currentVersion': {'type': ['object', 'null'], 'required': ['version', 'isPrerelease'], 'properties': {'version': {'type': 'string'}, 'isLatest': {'type': 'boolean'}, 'framework': {'type': 'string', 'description': 'How the control is built, e.g. "react_virtual".'}, 'properties': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type', 'isRequired'], 'properties': {'kind': {'type': 'string', 'description': 'input, output, dataset, dataset_column or feature.'}, 'name': {'type': 'string', 'description': "The property's logical name, as bound in the maker."}, 'type': {'type': 'string', 'description': 'The Power Platform type, e.g. "SingleLine.Text", "TwoOptions", "DataSet".'}, 'usage': {'type': ['string', 'null'], 'description': 'input, output or bound. Null on a feature.'}, 'isRequired': {'type': 'boolean'}, 'description': {'type': ['string', 'null']}, 'displayName': {'type': ['string', 'null']}, 'defaultValue': {'type': ['string', 'null']}}}, 'description': 'Every property the control exposes, including the columns a dataset control binds.'}, 'releasedAt': {'type': ['string', 'null'], 'description': 'ISO 8601.'}, 'isPrerelease': {'type': 'boolean'}, 'releaseNotesMd': {'type': ['string', 'null']}, 'minPlatformVersion': {'type': ['string', 'null']}}, 'description': 'The release described, or null where nothing has been published yet.'}, 'controlTypeDescription': {'type': 'string', 'description': 'What that control type means, in a sentence.'}}}
Input schema
{'type': 'object', 'required': ['slug', 'section'], 'properties': {'slug': {'type': 'string', 'description': 'The control\'s slug, e.g. "pcf-tag-list".'}, 'section': {'enum': ['overview', 'installation', 'canvas', 'model_driven', 'api', 'examples', 'limitations', 'faq', 'migration', 'changelog'], 'type': 'string', 'description': 'Which section to read.'}, 'version': {'type': 'string', 'description': 'Documentation pinned to a specific release. Defaults to the current documentation.'}}}
Output schema
{'type': 'object', 'required': ['componentSlug', 'componentName', 'isVersionPinned', 'section', 'title', 'contentMd', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Absolute URL of the page, for citing.'}, 'title': {'type': 'string'}, 'section': {'enum': ['overview', 'installation', 'canvas', 'model_driven', 'api', 'examples', 'limitations', 'faq', 'migration', 'changelog'], 'type': 'string'}, 'version': {'type': ['string', 'null'], 'description': 'The release this documentation describes.'}, 'contentMd': {'type': 'string', 'description': 'The page as Markdown, with its frontmatter removed. Empty when the page has no content.'}, 'sourceUrl': {'type': ['string', 'null'], 'description': "The file in the author's repository this was compiled from."}, 'updatedAt': {'type': ['string', 'null'], 'description': 'ISO 8601.'}, 'description': {'type': ['string', 'null']}, 'componentName': {'type': 'string'}, 'componentSlug': {'type': 'string'}, 'isVersionPinned': {'type': 'boolean', 'description': 'True when a version was asked for, rather than the current documentation being returned.'}}}
Input schema
{'type': 'object', 'properties': {'host': {'enum': ['canvas', 'model-driven'], 'type': 'string', 'description': 'Where the control has to run. A control supporting both hosts matches either.'}, 'page': {'type': 'integer', 'minimum': 1, 'description': 'Defaults to 1.'}, 'sort': {'enum': ['relevance', 'newest', 'popular', 'name', 'updated'], 'type': 'string', 'description': 'Defaults to relevance when there is a query, newest otherwise.'}, 'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tag slugs, from list_taxonomy. A control must carry every tag given.'}, 'query': {'type': 'string', 'description': 'Words to match against names, taglines and descriptions.'}, 'author': {'type': 'string', 'description': 'An author slug, from list_taxonomy.'}, 'category': {'type': 'string', 'description': 'A category slug, from list_taxonomy.'}, 'per_page': {'type': 'integer', 'maximum': 48, 'minimum': 1, 'description': 'Defaults to 24; at most 48.'}, 'control_type': {'enum': ['field', 'dataset', 'virtual', 'grid_customizer'], 'type': 'string', 'description': 'field binds one column on a form; dataset renders a view; virtual is a React control; grid_customizer changes how an editable grid renders cells.'}}}
Output schema
{'type': 'object', 'required': ['page', 'perPage', 'lastPage', 'total', 'sort', 'components'], 'properties': {'page': {'type': 'integer', 'description': 'The page returned.'}, 'sort': {'type': 'string', 'description': 'The sort actually applied, which is the default when none was given or the one given was not recognised.'}, 'total': {'type': 'integer', 'description': 'Controls matching the filters, across every page.'}, 'perPage': {'type': 'integer'}, 'lastPage': {'type': 'integer', 'description': 'The highest page number for these filters.'}, 'components': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name', 'controlType', 'hosts', 'category', 'author', 'downloadCount', 'url'], 'properties': {'url': {'type': 'string', 'description': "Absolute URL of the control's page."}, 'name': {'type': 'string'}, 'slug': {'type': 'string', 'description': 'Pass to get_component.'}, 'hosts': {'type': 'array', 'items': {'enum': ['canvas', 'model-driven'], 'type': 'string'}, 'description': 'Where this control runs. Empty only where nobody has declared it.'}, 'author': {'type': 'string', 'description': 'Author slug.'}, 'tagline': {'type': ['string', 'null']}, 'category': {'type': 'string', 'description': 'Category slug.'}, 'controlType': {'enum': ['field', 'dataset', 'virtual', 'grid_customizer'], 'type': 'string'}, 'downloadCount': {'type': 'integer'}, 'latestVersion': {'type': ['string', 'null'], 'description': 'Null where nothing has been released yet.'}}}}}}
Input schema
{'type': 'object', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'The control\'s slug, e.g. "pcf-tag-list".'}}}
Output schema
{'type': 'object', 'required': ['slug', 'sections'], 'properties': {'slug': {'type': 'string', 'description': 'The control the sections belong to.'}, 'sections': {'type': 'array', 'items': {'type': 'object', 'required': ['section', 'title', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Absolute URL of the page.'}, 'title': {'type': 'string', 'description': "The section's heading, as the author wrote it."}, 'section': {'type': 'string', 'description': 'Pass to get_doc_page as its section argument.'}}}}}}
Input schema
{'type': 'object', 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'How many releases. Defaults to 20.'}}}
Output schema
{'type': 'object', 'required': ['releases'], 'properties': {'releases': {'type': 'array', 'items': {'type': 'object', 'required': ['componentSlug', 'componentName', 'version', 'isPrerelease', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Absolute URL of the release.'}, 'version': {'type': 'string'}, 'releasedAt': {'type': ['string', 'null'], 'description': 'ISO 8601, or null where the release carries no date.'}, 'isPrerelease': {'type': 'boolean'}, 'componentName': {'type': 'string'}, 'componentSlug': {'type': 'string', 'description': 'Pass to get_component.'}}}, 'description': 'Newest first.'}}}
Input schema
{'type': 'object', 'required': ['kind'], 'properties': {'kind': {'enum': ['categories', 'tags', 'authors', 'hosts'], 'type': 'string', 'description': 'Which list to return.'}}}
Output schema
{'type': 'object', 'required': ['kind', 'items'], 'properties': {'kind': {'enum': ['categories', 'tags', 'authors', 'hosts'], 'type': 'string', 'description': 'Which list this is.'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['slug', 'name', 'componentsCount'], 'properties': {'name': {'type': 'string'}, 'slug': {'type': 'string', 'description': 'Pass to list_components as its category, tag, author or host filter.'}, 'children': {'type': 'array', 'description': 'Child categories, in the same shape. Categories only.'}, 'isVerified': {'type': 'boolean', 'description': 'Authors only.'}, 'description': {'type': ['string', 'null'], 'description': 'Categories only.'}, 'githubLogin': {'type': ['string', 'null'], 'description': 'Authors only.'}, 'componentsCount': {'type': 'integer', 'description': 'How many published controls this covers.'}}}}}}
Input schema
{'type': 'object', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'How many results to return. Defaults to 10.'}, 'query': {'type': 'string', 'description': 'What to look for, in plain words: "barcode scanner", "kanban", "date range".'}}}
Output schema
{'type': 'object', 'required': ['query', 'total', 'hits'], 'properties': {'hits': {'type': 'array', 'items': {'type': 'object', 'required': ['type', 'title', 'componentSlug', 'componentName', 'url'], 'properties': {'url': {'type': 'string', 'description': 'Absolute URL of the page, for citing.'}, 'type': {'enum': ['component', 'doc_page'], 'type': 'string', 'description': 'A control, or a page of its documentation.'}, 'title': {'type': 'string'}, 'section': {'type': ['string', 'null'], 'description': 'On a doc hit, the section key — "installation" — to pass to get_doc_page with componentSlug; null on a component hit.'}, 'snippet': {'type': ['string', 'null'], 'description': "The matching text, with the site's highlight markup stripped."}, 'sectionLabel': {'type': ['string', 'null'], 'description': 'On a doc hit, the section as the site titles it — "Installation"; null on a component hit.'}, 'componentName': {'type': 'string'}, 'componentSlug': {'type': 'string', 'description': 'Pass to get_component or get_doc_page.'}}}}, 'query': {'type': 'string', 'description': 'The query as it was searched.'}, 'total': {'type': 'integer', 'description': 'How many results matched, which may be more than were returned.'}, 'correctedQuery': {'type': ['string', 'null'], 'description': 'Set only when nothing matched the query and these are results for a corrected spelling of it.'}}}
Input schema
{'type': 'object', 'required': ['manifest'], 'properties': {'manifest': {'type': 'string', 'description': 'The full contents of pcfhub.json, as JSON text.'}}}
Output schema
{'type': 'object', 'required': ['valid', 'schemaVersion', 'errors', 'warnings'], 'properties': {'valid': {'type': 'boolean', 'description': 'False when there is at least one error. Warnings alone leave it true.'}, 'errors': {'type': 'array', 'items': {'type': 'object', 'required': ['pointer', 'message'], 'properties': {'message': {'type': 'string'}, 'pointer': {'type': 'string', 'description': 'RFC 6901 JSON pointer to the part of the manifest at fault, e.g. "/demo/presets/0".'}}}, 'description': 'Must be fixed; publishing refuses the manifest until they are.'}, 'warnings': {'type': 'array', 'items': {'type': 'object', 'required': ['pointer', 'message'], 'properties': {'message': {'type': 'string'}, 'pointer': {'type': 'string', 'description': 'RFC 6901 JSON pointer to the part of the manifest at fault, e.g. "/demo/presets/0".'}}}, 'description': 'Do not block publishing, but reach the author through their own CI.'}, 'schemaVersion': {'type': 'integer', 'description': 'The manifest schema version it was checked against.'}}}
Recent tool changes
Similar MCP servers
cypher-mcp
Provides named Cypher graph queries and code-orientation tools for tracing capabilities, symbols, invariants, provenance, changes…
canton-ccpedia
Searches and explains Canton Network and Daml documentation, governance proposals, forums, code examples, APIs, releases, and eco…
ALM X++ MCP Server
Supports D365 Finance and Operations development with X++ and AOT search, code analysis, Azure DevOps workflows, telemetry querie…
Kaiku
Manages team issues, comments, attachments, projects, wiki pages, and related development workflows.
api-evangelist
Provides API governance analysis, OpenAPI overlays and version diffs, security-sensitive field classification, code samples, matu…
Forge Engine
Manages software design specifications, systems, milestones, tasks, code mappings, project decisions, UI screens, and implementat…
Avalanche AVAX MCP
Searches and retrieves Avalanche documentation, community proposals, CLI guidance, Builder Console workflows, blockchain identifi…
Github
Reads public GitHub repository files, releases, commits, issues, repository metadata, user profiles, and trending repositories.