Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
9afebbd
Remove beta labels, single-source duplicated content, and add testing
JakeSCahill Dec 3, 2025
0795b78
Merge branch 'main' into DOC-1844
JakeSCahill Dec 3, 2025
4af7395
Document automatic service account creation
JakeSCahill Dec 5, 2025
196fd9e
Add billing info for MCP
JakeSCahill Dec 5, 2025
ae615e9
Correct MCP and serverless cluster API paths
JakeSCahill Dec 5, 2025
2fae2f8
Split admin guide into task-based pages
JakeSCahill Dec 5, 2025
6fafd4d
Enhance MCP server pipeline patterns documentation
JakeSCahill Dec 5, 2025
bb13636
Add .env to gitignore
JakeSCahill Dec 5, 2025
86fd22f
Escape curly braces in API path parameters
JakeSCahill Dec 5, 2025
4e002c7
Fix anchor
JakeSCahill Dec 5, 2025
1762040
Document tags and reserved tag names for Remote MCP servers
JakeSCahill Dec 8, 2025
5dea823
Update MCP server creation flow to match UI terminology
JakeSCahill Dec 8, 2025
cfdb632
Convert tagging strategies to table format
JakeSCahill Dec 8, 2025
e293ede
Update workflow and document inline secret creation in Cloud Console
JakeSCahill Dec 8, 2025
b7a0a61
Add cross-reference to tool contract design section
JakeSCahill Dec 8, 2025
c1f9e53
Simplify heading to 'Build your MCP tool'
JakeSCahill Dec 8, 2025
194f52f
Add real trace examples showing tool execution and error events
JakeSCahill Dec 8, 2025
5ba5218
Use uppercase snakecase for Grafana Cloud secret names
JakeSCahill Dec 8, 2025
2ac3688
Simplify monitoring docs and remove unnecessary sections
JakeSCahill Dec 8, 2025
d77ef3d
Update monitoring docs with realistic trace examples and schema details
JakeSCahill Dec 8, 2025
19fcd2e
Update branch
JakeSCahill Dec 8, 2025
e98b2d9
Fix doc-tools not found error in test-mcp-examples workflow
JakeSCahill Dec 8, 2025
294cf1c
Make MCP validation failures fail the test suite
JakeSCahill Dec 8, 2025
fc4b688
fix: Resolve ShellCheck warnings in test script
JakeSCahill Dec 8, 2025
6c38dcd
Fix schema syntax
JakeSCahill Dec 8, 2025
2c4e0cd
Remove beta
JakeSCahill Dec 8, 2025
1c724c2
Add badge macro
JakeSCahill Dec 8, 2025
9f55377
Add badge macro
JakeSCahill Dec 8, 2025
b40d095
fix: Correct MCP API examples and secret naming
JakeSCahill Dec 8, 2025
d43c0d4
Add warning about redpanda.otel_traces topic management
JakeSCahill Dec 9, 2025
7c282da
Document redpanda.otel_traces topic billing
JakeSCahill Dec 9, 2025
c440a3c
Add 'Outputs with processors' pattern for Remote MCP
JakeSCahill Dec 9, 2025
96348ff
Clarify how to identify MCP tools in shared traces topic
JakeSCahill Dec 9, 2025
482be19
Add trace topic configuration and lifecycle details
JakeSCahill Dec 9, 2025
3a665a5
Minor fixes
JakeSCahill Dec 9, 2025
12be320
Use 'MCP server' terminology consistently across MCP remote docs
JakeSCahill Dec 9, 2025
efb6611
Fix remaining 'Remote MCP server' instances to use 'MCP server'
JakeSCahill Dec 9, 2025
f64a6c6
Remove 'Remote MCP' from xref link text and section headings
JakeSCahill Dec 9, 2025
473015b
Clarify terms
JakeSCahill Dec 9, 2025
d6f4da6
Apply suggestions from code review
JakeSCahill Dec 9, 2025
0d5d6fa
Formatting
JakeSCahill Dec 9, 2025
520f5c0
Fix tests to use mcp-server lint
JakeSCahill Dec 10, 2025
b970ed7
Cleanup
JakeSCahill Dec 10, 2025
f370b41
Use verbose linting and check for output since Connect does not exit …
JakeSCahill Dec 11, 2025
665ea67
Merge branch 'main' into DOC-1844
JakeSCahill Dec 11, 2025
d5d30e3
Fix linter
JakeSCahill Dec 11, 2025
d91266b
Merge branch 'DOC-1844' of https://github.com/redpanda-data/cloud-doc…
JakeSCahill Dec 11, 2025
e9cd68d
Fix MCP trace docs: clarify 100% sampling, remove unsupported exports
JakeSCahill Dec 12, 2025
a9ec8ce
Merge branch 'main' into DOC-1844
JakeSCahill Dec 13, 2025
721e322
Update monitor-activity.adoc
JakeSCahill Dec 15, 2025
fef4dc0
Update modules/ai-agents/pages/mcp/remote/monitor-activity.adoc
JakeSCahill Dec 15, 2025
24a0f37
Update developer-guide.adoc
JakeSCahill Dec 15, 2025
6eb42b3
Merge branch 'main' into DOC-1844
JakeSCahill Dec 17, 2025
3940445
apply suggestions
JakeSCahill Dec 17, 2025
7904d44
Merge branch 'DOC-1844' of https://github.com/redpanda-data/cloud-doc…
JakeSCahill Dec 17, 2025
f404c42
apply suggestions
JakeSCahill Dec 17, 2025
0403bd7
apply suggestions
JakeSCahill Dec 17, 2025
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
53 changes: 53 additions & 0 deletions .github/workflows/test-mcp-examples.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
name: Test MCP Examples

on:
push:
branches:
- main
paths:
- 'modules/ai-agents/examples/**/*.yaml'
- 'modules/ai-agents/examples/test-mcp-examples.sh'
pull_request:
branches:
- main
paths:
- 'modules/ai-agents/examples/**/*.yaml'
- 'modules/ai-agents/examples/test-mcp-examples.sh'

jobs:
test-all-examples:
name: Test All MCP Examples
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '22'

- name: Install npm dependencies
run: npm install

- name: Install doc-tools dependencies
run: npx --no-install doc-tools install-test-dependencies

- name: Install yq
run: |
sudo wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64
sudo chmod +x /usr/local/bin/yq

- name: Make test script executable
run: chmod +x modules/ai-agents/examples/test-mcp-examples.sh

- name: Run MCP examples tests
run: |
cd modules/ai-agents/examples
./test-mcp-examples.sh

- name: Test Summary
if: always()
run: |
echo "::notice title=MCP Examples Testing::All Cloud MCP examples have been validated"
2 changes: 1 addition & 1 deletion .github/workflows/update-extensions.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:

- uses: actions/setup-node@v4
with:
node-version: '18'
node-version: '22'

- run: npm install

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ build/_redirects
poc-docs/
docs/
.docusaurus
.env
1 change: 1 addition & 0 deletions local-antora-playbook.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ asciidoc:
- '@redpanda-data/docs-extensions-and-macros/macros/config-ref'
- '@redpanda-data/docs-extensions-and-macros/macros/helm-ref'
- '@redpanda-data/docs-extensions-and-macros/asciidoc-extensions/add-line-numbers-highlights'
- '@redpanda-data/docs-extensions-and-macros/macros/badge'
antora:
extensions:
- require: '@redpanda-data/docs-extensions-and-macros/extensions/generate-rp-connect-info'
Expand Down
3 changes: 3 additions & 0 deletions modules/ROOT/nav.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,9 @@
*** xref:ai-agents:mcp/remote/quickstart.adoc[Quickstart]
*** xref:ai-agents:mcp/remote/developer-guide.adoc[Developer Guide]
*** xref:ai-agents:mcp/remote/admin-guide.adoc[Admin Guide]
**** xref:ai-agents:mcp/remote/manage-servers.adoc[Manage Servers]
**** xref:ai-agents:mcp/remote/scale-resources.adoc[Scale Resources]
**** xref:ai-agents:mcp/remote/monitor-activity.adoc[Monitor Activity]
*** xref:ai-agents:mcp/remote/pipeline-patterns.adoc[MCP Server Patterns]

* xref:develop:connect/about.adoc[Redpanda Connect]
Expand Down
19 changes: 19 additions & 0 deletions modules/ai-agents/examples/redpanda_output_with_processors.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
redpanda:
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this work? in MCP there must be one component at the root IIRC

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah outputs and inputs can have individual processors too

seed_brokers: [ "${REDPANDA_BROKERS}" ]
topic: "llm-responses"
tls:
enabled: true
sasl:
- mechanism: "${REDPANDA_SASL_MECHANISM}"
username: "${REDPANDA_SASL_USERNAME}"
password: "${REDPANDA_SASL_PASSWORD}"

processors:
- openai_chat_completion:
api_key: "${secrets.OPENAI_API_KEY}"
model: "gpt-4"
prompt: ${! json("question") }
- mapping: |
root.question = this.question
root.answer = this.content
root.timestamp = now().ts_format("2006-01-02T15:04:05Z07:00")
157 changes: 157 additions & 0 deletions modules/ai-agents/examples/test-mcp-examples.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
#!/usr/bin/env bash
#
# Automated testing script for Redpanda Connect MCP examples
#
# Usage:
# ./test-mcp-examples.sh

set -euo pipefail

# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'

# Counters
TOTAL=0
SKIPPED=0
MCP_FAILS=0

echo "🧪 Redpanda Connect MCP Examples Test Suite"
echo "============================================"
echo ""

# Run MCP server lint on the directory
echo "Running rpk connect mcp-server lint..."
LINT_OUTPUT=$(rpk connect mcp-server lint --skip-env-var-check --verbose 2>&1) || {
echo -e "${RED}❌ Linting failed${NC}"
echo ""
echo "$LINT_OUTPUT"
exit 1
}
echo -e "${GREEN}✅ Linting passed${NC}"
echo ""

# Function to validate MCP metadata
validate_mcp_metadata() {
local file=$1

echo -n " Validating MCP metadata... "

# Determine which YAML parser to use
local use_yq=true
if ! command -v yq &> /dev/null; then
use_yq=false
if ! command -v python3 &> /dev/null; then
echo -e "${RED}FAILED${NC} (neither yq nor python3 available)"
MCP_FAILS=$((MCP_FAILS + 1))
return 1
fi
fi

# Check if .meta.mcp exists
local mcp_exists
if $use_yq; then
mcp_exists=$(yq eval '.meta.mcp' "$file" 2>/dev/null)
else
mcp_exists=$(python3 -c "
import yaml
try:
with open('$file') as f:
doc = yaml.safe_load(f)
meta = doc.get('meta', {}) if doc else {}
mcp = meta.get('mcp')
print('null' if mcp is None else 'exists')
except:
print('null')
" 2>/dev/null)
fi

if [[ "$mcp_exists" == "null" || -z "$mcp_exists" ]]; then
echo -e "${YELLOW}SKIPPED${NC} (no MCP metadata)"
SKIPPED=$((SKIPPED + 1))
return 0
fi

# Read .meta.mcp.enabled
local enabled
if $use_yq; then
enabled=$(yq eval '.meta.mcp.enabled' "$file" 2>/dev/null)
else
enabled=$(python3 -c "
import yaml
try:
with open('$file') as f:
doc = yaml.safe_load(f)
enabled = doc.get('meta', {}).get('mcp', {}).get('enabled')
print('null' if enabled is None else str(enabled).lower())
except:
print('null')
" 2>/dev/null)
fi

if [[ "$enabled" != "true" ]]; then
echo -e "${YELLOW}WARNING${NC} (mcp.enabled not set to true)"
return 0
fi

# Read .meta.mcp.description
local description
if $use_yq; then
description=$(yq eval '.meta.mcp.description' "$file" 2>/dev/null)
else
description=$(python3 -c "
import yaml
try:
with open('$file') as f:
doc = yaml.safe_load(f)
desc = doc.get('meta', {}).get('mcp', {}).get('description')
print('null' if desc is None or desc == '' else str(desc))
except:
print('null')
" 2>/dev/null)
fi

if [[ "$description" == "null" || -z "$description" ]]; then
echo -e "${RED}FAILED${NC} (missing description)"
MCP_FAILS=$((MCP_FAILS + 1))
return 1
fi

echo -e "${GREEN}PASSED${NC}"
return 0
}

# Validate MCP metadata for each file
for file in *.yaml; do
if [[ -f "$file" ]]; then
TOTAL=$((TOTAL + 1))
echo ""
echo -e "${BLUE}📄 Validating: $file${NC}"
validate_mcp_metadata "$file"
fi
done

# Summary
echo ""
echo "============================================"
echo "📊 Test Summary"
echo "============================================"
echo "Total configs tested: $TOTAL"
if [[ $MCP_FAILS -gt 0 ]]; then
echo -e "MCP validation failures: ${RED}$MCP_FAILS${NC}"
fi
if [[ $SKIPPED -gt 0 ]]; then
echo -e "Skipped: ${YELLOW}$SKIPPED${NC}"
fi
echo ""

if [[ $MCP_FAILS -gt 0 ]]; then
echo -e "${RED}❌ Some tests failed${NC}"
exit 1
else
echo -e "${GREEN}✅ All tests passed!${NC}"
exit 0
fi
Loading
Loading