Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,16 @@ repos:
hooks:
- id: update-docs

- repo: local
hooks:
- id: generate-templates
name: (Re)generate Portal Templates
entry: ansible-playbook generate_template.yaml
language: python
pass_filenames: false
additional_dependencies:
- ansible-core

- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v6.0.0
hooks:
Expand Down
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# files we don't want prettier to ever to look into
.*/
coverage/
extensions/mcp

# Environments
.env
Expand Down
3 changes: 3 additions & 0 deletions changelogs/fragments/minor_add_server_template.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
minor_changes:
- Add playbook to generate template files based off role defaults for other tools to know what MCP servers a collection supports.
17 changes: 17 additions & 0 deletions extensions/mcp/servers.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
- name: github_mcp
servers:
- repository:
name: github-mcp-server
type: stdio
lang: go
args: ['stdio']
description: GitHub MCP Server - Access GitHub repositories, issues, and pull requests
- name: aws_iam_mcp
servers:
- repository:
name: awslabs.iam-mcp-server
type: stdio
lang: pypi
args: []
description: An MCP server for comprehensive AWS Identity and Access Management (IAM) operations.
55 changes: 55 additions & 0 deletions generate_template.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# vi: ft=yaml.ansible
---
- name: Generate portal template files
hosts: localhost
connection: local
gather_facts: false

tasks:
- name: Collect roles
ansible.builtin.find:
file_type: directory
paths:
- "{{ playbook_dir }}/roles"
register: role_paths

- name: Set role names
ansible.builtin.set_fact:
mcp_roles: "{{ role_paths.files | map(attribute='path') | map('basename') }}"
mcp_extension_dir: "{{ playbook_dir }}/extensions/mcp"

- name: Create noop task file
ansible.builtin.copy:
content: "---\n# Do nothing\n"
dest: "roles/{{ item }}/tasks/noop.yaml"
mode: "0644"
loop: "{{ mcp_roles }}"

- name: Load MCP roles to gain access to defaults
ansible.builtin.include_role:
name: "{{ item }}"
tasks_from: noop
public: true
loop: "{{ mcp_roles }}"

- name: Zip registry with details
ansible.builtin.set_fact:
registries: >-
{{ registries | default([]) | union([{
'name': item,
'registry': lookup('vars', item + '_registry', default=[]),
}]) }}
loop: "{{ mcp_roles }}"

- name: Create destination directory
ansible.builtin.file:
dest: "{{ mcp_extension_dir }}"
state: directory
mode: "0755"

- name: Template each registry
ansible.builtin.template:
src: server.yaml.j2
dest: "{{ mcp_extension_dir }}/servers.yaml"
mode: "0644"
lstrip_blocks: true
3 changes: 0 additions & 3 deletions roles/github_mcp/meta/main.yml

This file was deleted.

11 changes: 11 additions & 0 deletions templates/server.yaml.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
{% for registry in registries if registry.registry %}
- name: {{ registry.name }}
servers:
{% for server in registry.registry %}
- repository:
{% for key, value in server.items() %}
{{key}}: {{ value }}
{% endfor %}
{% endfor %}
{% endfor %}