s1-secops-skills v1.3.0 + s1-secops-mcp 1.3.1: single-credential SDL auth, Hyperautomation integration catalog - #86
Merged
marcorottigni-s1 merged 6 commits intoAug 7, 2026
Conversation
Syncs the hyperautomation skill from claude-skills v1.2.17.
New: skills/hyperautomation/references/integration-catalog.md. The 62 built-in
and 52 custom Hyperautomation integrations resolved from a production tenant,
with all 266 packaged actions (public_action_id, method, path) grouped by
integration, plus the ad-hoc call shapes seen against each. The skill
previously documented action types but had no way to answer "what can this
integration do", so it hand-rolled URLs instead of picking a packaged action.
Mined from 1,205 exported workflows / 17,899 action steps, cross-checked
against 39 workflows on six further tenants.
Also in the skill:
- Document the native `llm` action in building-blocks.md. It was referenced in
prose but never given a schema; response_format and json_schema appeared
nowhere in the skill.
- Correct the action-type prevalence table: 19 types, not 17. Adds `llm` and
`snippet_20`, and refreshes counts from the 1,205-workflow corpus.
- Record the SQL action as a known gap. S-26.2 documents it; it appears in zero
sampled workflows, so its JSON type string is unverified and not guessed.
- Note that integration action packs are not queryable: GET /integrations is
405, /integrations/{id}/actions is 404, and enumeration only works via
/connections/scope.
- README: list building-blocks-catalog.md (never listed) and the new catalog,
and add a Coverage and known gaps section.
Build fix: scripts/build.sh now drops superseded s1-secops-skills-v*.plugin
files from dist/ on every build. Without it this bump left v1.2.16 sitting next
to v1.2.17. This ports claude-skills ed51841, which fixed the same bug there.
Plugin 1.2.16 -> 1.2.17, dist rebuilt.
…auth Syncs claude-skills. Supersedes the v1.2.17 content on this branch. Credentials, seven variables reduce to three: - The console API token authorises every SDL operation. SDL_CONFIG_READ_KEY, SDL_CONFIG_WRITE_KEY, SDL_LOG_READ_KEY and SDL_LOG_WRITE_KEY are no longer read anywhere. - SDL_XDR_URL removed. The SDL base is derived from S1_CONSOLE_URL as <console>/sdl. Verified live: <console>/sdl/api/* returns results identical to the regional XDR host. - The image entrypoint derives PURPLEMCP_CONSOLE_BASE_URL, PURPLEMCP_CONSOLE_TOKEN and VIRUSTOTAL_API_KEY from the canonical S1_* names, so all three bundled servers are configured with one set of names. Code: - lib/sdl.js: keyCandidates() and the per-chain 401/403 fallthrough replaced by sdlToken(); sdlFetch drops the chain argument. A 403 is raised on the first request rather than retried against a second credential. - sdl_client.py: KEY_CHAINS, _candidate_keys() and _pick_key() removed; _auth_headers() builds one Bearer header; the client fails fast at construction when the token is absent. SDLClient.keys no longer exists, so the c.keys["log_read_key"] = "" force-clear idiom is gone from every skill, doc and CLAUDE.md. - MCP 1.2.4 -> 1.3.1, npm package @pmoses-s1/s1-secops-mcp, Docker image 1.3.1. Skills: - hyperautomation: new references/integration-catalog.md, the 62 built-in and 52 custom integrations with all 266 packaged actions (public_action_id, method, path), mined from 1,205 production workflows. Documents the native llm action, corrects the action-type table to 19 types, and records the SQL action as a known gap. Marco Rottigni credited as co-author. Verified live with only S1_CONSOLE_URL and S1_CONSOLE_API_TOKEN exposed: 27 data sources enumerated, per-source schema discovery 27/27 (843 distinct fields), parser lifecycle 12/12 including stale-version rejection, sdl-api smoke_test.py 12/12, MCP tools/list 26. Node suite 57/57. markdownlint, shellcheck and shfmt clean. No new broken links, no dangling symlinks. Plugin rebuilt at 1.3.0.
getCreds() read VT_API_KEY but nothing consumed it, and this MCP exposes no VirusTotal tools. Behaviourally a no-op.
marcorottigni-s1
pushed a commit
that referenced
this pull request
Aug 7, 2026
…e console host Follow-up to #86. - docs/installation.md and docs/vm-deployment.md configured purple-mcp with PURPLEMCP_CONSOLE_TOKEN / PURPLEMCP_CONSOLE_BASE_URL. The image entrypoint derives both from S1_CONSOLE_URL and S1_CONSOLE_API_TOKEN, so the examples now use the canonical two. Verified live against the 1.3.1 image. - README advertised :1.2.3 bundling s1-secops-mcp 1.2.2; now :1.3.1 / 1.3.1. - sdl-api, sdl-dashboard and the RBA workflow template still described the SDL REST endpoints as living on xdr.us1; they are reachable at <console>/sdl/api/* with identical results. Left alone: the LRQ docs that name xdr.us1 to warn against it, the V1 deprecation notices, and the hyperautomation catalogs where the host is mined corpus data. Plugin rebuilt at 1.3.0.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Credentials: Removed the need for the XDR URL/SDL Log & Config API Keys by using new GraphQL Console APIs
The console API token authorises every SDL operation. Verified live against a production tenant with only the reduced set exposed, then verified again that the scoped keys pass on exactly the same calls, so they add nothing but rotation overhead.
Removed entirely, no longer read anywhere:
SDL_CONFIG_READ_KEY,SDL_CONFIG_WRITE_KEY,SDL_LOG_READ_KEY,SDL_LOG_WRITE_KEYSDL_XDR_URL— the SDL base is now derived fromS1_CONSOLE_URLas<console>/sdl.POST <console>/sdl/api/*returns results identical to the regional XDR host (1,914 config paths either way), so the separate host was redundant.Not needed in
claude_desktop_config.jsonwhen running through the s1-mcps image:PURPLEMCP_CONSOLE_BASE_URLandPURPLEMCP_CONSOLE_TOKEN. The entrypoint derives them fromS1_CONSOLE_URLandS1_CONSOLE_API_TOKEN, so purple-mcp takes the same two variable names ass1-secops-mcp. Verified live: purple-mcp initialises inside the image with only those two set. A server-specific variable that is already set always wins, so existing configurations keep working.Running purple-mcp directly via
uvxbypasses the entrypoint, so that install path still needsPURPLEMCP_*.VIRUSTOTAL_API_KEYis unchanged.Minimum credential set is now
S1_CONSOLE_URL,S1_CONSOLE_API_TOKEN, andS1_HEC_INGEST_URLfor ingest, plusVIRUSTOTAL_API_KEYif you run virustotal-mcp.Code
lib/sdl.js:keyCandidates()and the per-chain 401/403 fallthrough are replaced bysdlToken();sdlFetchdrops itschainargument. A 403 is now raised on the first request rather than silently retried against a second credential.sdl_client.py:KEY_CHAINS,_candidate_keys()and_pick_key()removed._auth_headers()builds one Bearer header and the client fails fast at construction when the token is absent.SDLClient.keysno longer exists. Thec.keys["log_read_key"] = ""force-clear idiom raisesAttributeError, so it has been removed from every skill, doc andCLAUDE.md. This is the one change that will break copied snippets: delete those lines, nothing replaces them.1.2.4 -> 1.3.1, npm package@pmoses-s1/s1-secops-mcp, Docker image1.3.1.Skills
hyperautomation gains
references/integration-catalog.md: the 62 built-in and 52 custom integrations resolved live, with all 266 packaged actions (public_action_id, method, path) grouped by integration. The skill previously documented action types but had no way to answer "what can this integration do", so it hand-rolled URLs instead of selecting a packaged action. Mined from 1,205 production workflows / 17,899 action steps.Also in that skill: the native
llmaction now has a schema (it was referenced in prose but never defined), the action-type table is corrected from 17 to 19 types, and the SQL action is recorded as a known gap — S-26.2 documents it, it appears in zero sampled workflows, so its JSONtypestring is unverified and deliberately not guessed. Marco Rottigni is credited as co-author.Breaking
SDL_XDR_URLis unaffected; the values are simply ignored.SDLClient.keysremoval, as above.Verification
Live against a production tenant with only
S1_CONSOLE_URLandS1_CONSOLE_API_TOKENexposed:expectedVersion, stale-version rejection, delete, verify absentsdl-api/tests/smoke_test.py12/12tools/list26 tools; config-file CRUD greenRepo checks: Node suite 57/57, markdownlint, shellcheck and shfmt clean, no new broken links (the 18 pre-existing ones in
mcp/docker/README.md,mcp/s1-secops-mcp/deploy/README.mdandworkflows/**are untouched), no dangling symlinks. Plugin rebuilt at 1.3.0.