Property Extractor Unit TestsBLOCK
Extensions and macros developed for Redpanda documentation.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Overview
Comprehensive unit tests for the Redpanda property extraction system. These tests validate the transformer pipeline that processes C++ property declarations into JSON documentation format.
Test Coverage
EnterpriseTransformer Tests (5 tests)
- test_restricted_only_with_enum_vector: Validates correct classification when a property has restricted values AND an enum definition vector (enum is superset)
- test_restricted_with_sanctioned_disjoint_values: Validates classification when restricted and sanctioned values are disjoint sets
- test_restricted_only_single_vector: Tests simple restricted_only pattern with a single restriction vector
- test_non_enterprise_property: Ensures non-enterprise properties are correctly flagged
- test_simple_enterprise_property: Tests simple enterprise properties with lambda validators
ParamNormalizerTransformer Tests (3 tests)
- test_normalize_restriction_at_position_0: Validates normalization when restriction vector is at parameter position 0
- test_normalize_restriction_at_position_1: Validates normalization when restriction vector is at parameter position 1
- test_skip_normalization_for_literals: Ensures properties starting with literals are not normalized
TypeTransformer Tests (4 tests)
- test_extract_type_from_property_declaration: Extracts inner type from
propertydeclarations - test_extract_type_from_vector: Extracts type from
std::vectordeclarations - test_extract_type_from_one_or_many: Extracts type from
one_or_many_propertydeclarations - test_map_cpp_type_to_json_schema: Validates C++ to JSON Schema type mappings
BasicInfoTransformer Tests (3 tests)
- test_extract_name_and_description: Validates basic property name and description extraction
- test_skip_lambda_validators: Ensures lambda validator parameters are correctly skipped when finding property names
- test_normalize_file_path: V
2d05341775b0OBSERVED · 2026-10-11Exposed tools (131)
125 read · 4 write · 2 destructive. Blast radius: 2 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
AI | read | AI processors. |
MyConnector | read | A simple connector. |
Parsing | read | Parsers. |
Services | read | Inputs that consume from services. |
acl | read | Acl command. |
admin_api | read | x |
agent | read | Agent command. |
ai | read | AI command. |
aim | read | not ai: prefix must respect word boundary |
api-description-too-short | read | Prose doc string too short to explain anything |
api-missing-terminal-period | read | Prose doc string with no terminal period |
api-name-echo | read | Description merely restates the declared name (tautology) |
api-rpc-summary-not-separated | read | rpc comment has no blank line, so the whole comment becomes the summary |
api-summary-multiline | read | An operation summary must be a single line |
api-summary-terminal-period | read | An operation summary takes no terminal period |
api-undocumented-field | read | Published field or message with no doc string |
api_version | read | Affects endpoint paths ( |
audit_overrides | read | Audit docs-side overrides against extracted source strings |
auto_delete | destructive | Whether the queue auto-deletes. |
balancer-status | read | Check status. FIELDS Original fields content here. NOTES Some notes. |
bang-bang-callout | read | !!TEXT!! style callouts are not allowed |
bar | read | desc2 |
baz | read | no match |
blank | read | |
broken-macro | read | xref:/glossterm:/config_ref: macro with unbalanced brackets |
bucket | read | Bucket name. |
bundle | read | Collect a bundle. |
checkpoint_limit | read | The maximum number of messages that can be processed at a given time per partition. |
client_secret | read | Sensitive: prefer environment variable interpolation ( |
cloud | read | Cloud command. |
cluster | read | Cluster desc |
cluster_id | read | Cluster identifier. |
coming-soon-placeholder | read | Coming soon placeholder content |
connect | read | Redpanda Connect plugin |
connect-availability-prose | read | Cloud or cgo availability written as prose instead of data |
connect-cli-usage-multiline | read | urfave/cli Usage is a one-line label |
connect-env-conditional | read | AsciiDoc ifdef/ifndef conditional in a Go spec string |
connect-short-description-markup | read | ShortDescription is plain text in form-based editors |
connect-xref-module | read | xref without a module, or to a module the Connect docs do not have |
count | read | Old desc |
create | write | Original description |
data_dir | read | y |
dead-marker | read | A # -- marker no docs pipeline can attach to any key |
debug | read | Debug a Redpanda SQL cluster. |
delete | destructive | Delete topic |
duplicate-content | read | Duplicate paragraphs or sections |
em-dash | read | Em dash in prose that ships to docs.redpanda.com |
empty-description | read | Declaration ships with no doc string at all |
fieldA | read | original desc |
foo | read | desc1 |
generate_bundle_openapi | read | Bundle Redpanda OpenAPI fragments. Creates complete OpenAPI 3.1 documents for admin and/or connect APIs by bundling fragments from the Redpanda repository. Writers use this when updating API reference docs. |
generate_cloud_regions | read | Generate cloud regions table documentation. Creates a Markdown or AsciiDoc table of cloud regions and tiers from GitHub YAML data. Writers use this when updating cloud region documentation. |
generate_crd_docs | read | Generate Kubernetes CRD (Custom Resource Definition) documentation. Creates AsciiDoc documentation for Kubernetes operator CRDs. Writers use this when updating operator reference docs. |
generate_helm_docs | read | Generate Helm chart documentation. Creates AsciiDoc documentation for Helm charts from local directories or GitHub repositories. Writers use this when updating Helm chart reference docs. |
generate_metrics_docs | read | Generate Redpanda metrics documentation for a specific version. Creates the public metrics reference page. Writers use this when updating metrics docs for a new release. Can run in background with progress streaming. |
generate_property_docs | read | Generate property documentation |
generate_rpcn_connector_docs | read | Generate Redpanda Connect connector documentation. Creates component documentation for all connectors. Writers use this when updating connector reference docs. Automatically uses docs-data/overrides.json if present. |
generate_rpk_docs | read | Generate rpk command-line documentation using the JSON-based |
get_antora_structure | read | Get information about the Antora documentation structure in the current repository, including components, modules, and available directories. Use this to understand the docs organization. |
get_console_version | read | Get the latest Redpanda Console version information including version number, Docker tag, and release notes URL. |
get_job_status | read | Get the status and progress of a background job. Use this to check on long-running documentation generation tasks. |
get_redpanda_version | read | Get the latest Redpanda version information including version number, Docker tag, and release notes URL. Writers use this to find out what version to document. |
go-field-name-first | read | Description leads with the Go field name instead of the YAML key |
group | read | x |
health | read | Health command. |
info | read | Info command. |
inherited-type-description | read | Field with no comment publishes its Go type\ |
inline-allcaps-warning | read | ALLCAPS warnings in middle of paragraph (not standalone admonitions) |
inner | read | orig |
install | write | y |
internal | read | Partial-only child. |
invalid-xref-syntax | read | xref: followed by http URL (invalid) |
k8s | read | Kubernetes plugin |
latin-abbreviation | read | Latin abbreviation instead of plain English |
lint | read | Lint a config |
list | read | List command. |
list_jobs | read | List all background jobs with optional filtering. Use this to see recent documentation generation jobs and their status. |
llm | read | x |
login | read | Login command. |
markdown-emphasis | read | Markdown-style **text** should be AsciiDoc |
misattached-marker | read | One # -- marker is published under two different keys |
missing-field-description | read | Config field constructed with no .Description() |
missing-inline-code | read | Code value or field name in prose without inline code |
missing-terminal-period | read | Property descriptions are complete sentences ending in a period |
name-echo | read | Description merely restates the declared name (tautology) |
offset | read | Original offset desc |
org_url | read | Production orgs use |
otlp_http | read | Traces go to |
p | read | Already a string. |
partitions | read | Original |
plain | read | Untouched string. |
prop_redundant | read | Same text. |
prop_upstreamable | read | Old text. |
raw-external-urls | read | Raw external URLs that should be links or removed |
raw-pipe | read | Raw unescaped | outside backticks breaks AsciiDoc tables |
replication | read | Original too |
review_generated_docs | read | Validate auto-generated documentation for structural issues. Checks for missing descriptions, invalid $refs, DRY violations, invalid xrefs, and calculates quality scores. For style and tone review, use the content-reviewer agent from docs-team-standards. |
rpc_server | read | Mentions admin_api and also data_dir in one paragraph. |
rpk | read | Root |
rpk-long-allcaps-heading | read | ALLCAPS line in Long becomes a === heading in the docs |
rpk-long-block-delimiter | read | A standalone ==== or ---- line in Long breaks AsciiDoc blocks |
rpk-short-multiline | read | Short must be a single line |
rpk-terminal-period | read | Short and flag usage strings do not end with a period |
run | write | Run a pipeline |
run_doc_tools_command | write | Advanced: Run a raw doc-tools command. Only use this if none of the specific tools above fit your needs. Requires knowledge of doc-tools CLI syntax. |
secret | read | Secret command. |
security | read | Security command. |
sentinel-default-unexplained | read | Property defaults to a sentinel whose meaning the description never explains |
sql | read | Interact with a Redpanda SQL cluster. |
sqlx | read | prefix must respect word boundary |
starts-lowercase | read | Description starts with a lowercase letter |
test | read | Description. EXAMPLES Some examples. |
test-cmd | read | Test command. EXAMPLES First example rpk test-cmd --flag1 Second example to exclude rpk test-cmd --exclude-me Third example rpk test-cmd --flag3 |
test_property | read | The source description. |
too-short | read | Description is under 20 characters |
topic | read | Topic commands |
trailing-period | read | Metric descriptions do not end with a period |
trim-prefix | read | Trim records |
truncated-description | read | Description appears truncated or garbled |
unbalanced-backticks | read | Odd number of backticks ships broken markup |
undocumented-field | read | Exported user-facing field with no doc comment |
undocumented-key | read | Key helm-docs publishes with an empty description |
unexpanded-jargon | read | Internal jargon that ships to users unexpanded |
unknown-attribute | read | {attr} reference that is not a known product attribute |
unverifiable-description | read | Description argument is not a plain string literal |
url | read | Queue URL. |
urls | read | A list of URLs. |
username | read | Username for authentication |
version | read | Version command. |
widget | read | Widget things. |
zero_key_warn_interval | read | Warn interval. |
Trust audit
BLOCKgrade F · trust 52/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | WARN |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (5 observation(s))
- Network
- none-observed
- Shell
- declared (3 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (25)
playbookContent = yaml.load(fs.readFileSync(playbookPath, 'utf8'));
const content = yaml.load(fs.readFileSync(ymlPath, 'utf8'));
result = eval(' '.join(evaluated_tokens))regex.wasm
regex.wasm
logger.warn(`The GitHub API found no ${tag} release of ${OWNER}/${REPO} with the GitHub token, and the public download has no ${ASSET_NAME} either. If the repo is private, check that the token has reaauto_delete, delete
ui-bundle.zip
.release-please-manifest.json
const parsed = yaml.load(workflowSource);
const parsed = yaml.load(fs.readFileSync(WORKFLOW_PATH, 'utf8'));
const parsed = yaml.load(workflow);
const evalCond = (expr) => eval(expr.replace(/github\.ref/g, JSON.stringify(ref)));
const { normalizeIncludes } = require(path.join(__dirname, '../../tools/property-extractor/helpers/applyPropertyLinks.js'))const bigIntJson = require('../../cli-utils/big-int-json')const file = path.join(__dirname, '../../preview/redpanda-connect/docs-data/connect-latest.json')
const { updatePropertiesJsonWithVersion, resolveDiffBaseline } = require('../../cli-utils/diff-utils.js');expect(() => resolveDiffBaseline(tmpDir, '../../etc/passwd')).toThrow(/attachments directory/);
# exfiltrate it over plaintext.
const externalBase = `http://127.0.0.1:${external.port}`expect(formatDescription('Point it at http://127.0.0.1:8081.')).toBe('Point it at `http://127.0.0.1:8081`.')@asciidoctor/tabs, @bufbuild/buf, @modelcontextprotocol/sdk, @octokit/core, @octokit/plugin-retry, @octokit/rest, @redocly/cli, ajv
handlebars
setuptools, pyyaml, requests, pytest
Gates applied: no_behavioural_pass, no_license.
2d05341775b0full audit observations/trust-audit/mcp-server/redpanda-data__docs-extensions-and-macros.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-11 | 2d05341775b0 | BLOCK | F | 52 | first audit |
Questions
What is the @redpanda-data/docs-extensions-and-macros MCP server?
Extensions and macros developed for Redpanda documentation.
What tools does @redpanda-data/docs-extensions-and-macros expose?
131 in total: 125 read-only, 4 that write, and 2 that can delete or overwrite (auto_delete, delete). Every one is listed on this page with its risk.
Is @redpanda-data/docs-extensions-and-macros safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (52/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 2 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does @redpanda-data/docs-extensions-and-macros need?
It reads ACTIONS_BOT_TOKEN, ALGOLIA_ADMIN_API_KEY, GH_TOKEN, GITHUB_TOKEN, GIT_CREDENTIALS and REDPANDA_GITHUB_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does @redpanda-data/docs-extensions-and-macros run?
It speaks stdio, so it runs as a local process your client starts.
How current is this page?
The grade is for one exact copy of the source (2d05341775b0), read on 2026-10-11. The repository is watched and re-audited when it changes.