# com.secdim/mcp

> Personalised developer security learning pathways from SecDim's challenges and courses.

- name: com.secdim/mcp
- version: 1.0.1
- connection class: R0 (autonomous)
- trust: 90/100
- quality: 76/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.secdim%2Fmcp
- tools: https://api.protogrid.dev/v1/servers/com.secdim%2Fmcp/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "secdim": {
      "type": "http",
      "url": "https://mcp.secdim.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 65
- provenance: 90
- drivers: +repository +namespace-matches-repo +dns-namespace +reachable +uptime-100% ~updated-92d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 76/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 64 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 2 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: search (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_learn_course (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); get_learn_topic (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 2,176 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 7, about 2,176 tokens to load them all
- tool set hash: e848728dcd558292b78a9b88569f0402
- badge: [![protogrid quality](https://protogrid.dev/badge/com.secdim/mcp.svg)](https://protogrid.dev/servers/com.secdim/mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://mcp.secdim.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (7)

- `fetch`: 
    Fetch detailed content for a specific SecDim Play lab (hands-on, scored challenge).

    Args:
        id: Lab ID in format "lab:slug" (e.g., "lab:xss-dom")

    Returns:
        Dictionary containing:
        - id: The lab ID
        - title: Lab title
        - content: Detailed content in markdown format
        - metadata: Additional lab information
    
- `get_learn_course`: 
    Get a SecDim Learn course's details, including its syllabus of topics.

    Args:
        course_slug: The course's slug, as returned by search_learn_courses
            (e.g. "owasp-top-10")

    Returns:
        Dictionary with the course's title, description, image, slug, "difficulty"
        label and a "topics" list. Each topic includes its title, description,
        category, slug, kind (e.g. text/video/lab), level, subscription tier,
        duration and completion status.
        Use get_learn_topic with the course slug and a topic's slug to view its content.
    
- `get_learn_topic`: 
    Get a SecDim Learn topic's content.

    Args:
        course_slug: The course's slug, as returned by search_learn_courses
            (e.g. "owasp-top-10")
        topic_slug: The topic's slug, as returned by get_learn_course
            (e.g. "introduction-secure-coding")

    Returns:
        Dictionary with the topic's title, description, category, kind, level,
        subscription tier, duration, completion status and "file_content" (the
        topic's content in AsciiDoc format).
        If the topic requires a SecDim Learn subscription that the current account
        does not have, an "error" explaining this is returned instead.
    
- `get_secdim_profile`: 
    Fetch a SecDim player's profile: scores, completed challenges, skills,
    security interests and an experience estimate.

    Use this tool to understand a player's demonstrated secure coding ability
    before building a learning pathway. The profile includes actual challenge
    completion data (by difficulty level) and security topics the player has
    practised — weight this demonstrated performance over a user's self-reported
    level when deciding what difficulty and topics to recommend.

    The 'guidance' field provides a ready-to-use summary of what difficulty and
    topics to target next, and whether the player is new, intermediate or
    experienced.

    Args:
        secdim_username: The player's SecDim username (e.g. "alice")

    Returns:
        Dictionary with scores, challenges_solved breakdown, skills (languages
        and technologies), completed_challenges list, security_interests,
        experience_estimate and guidance. If the user doesn't exist or an error
        occurs, returns an error dict.
    
- `search`: 
    Search for SecDim Play secure coding labs (hands-on, scored challenges).

    This tool searches across SecDim Play's hands-on secure coding labs based on the
    search query. The backend API handles parsing of vulnerability names, CWE IDs, and OWASP IDs.

    Language can be specified using the format "lang:javascript".

    Args:
        query: Search query that may include:
               - Vulnerability names (e.g., "XSS", "SQL injection")
               - CWE IDs (e.g., "79")
               - OWASP IDs (e.g., "A03:2021")

               Examples:
               - "XSS lang:javascript" - searches for XSS labs in JavaScript
               - "SQL injection lang:Python" - searches for SQL injection labs in Python
               - "79" - searches for labs related to CWE-79

    Returns:
        Dictionary with search results containing:
        - results: List of matching SecDim Play labs with id, title, snippet, and metadata
    
- `search_learn_courses`: 
    Search SecDim Learn courses.

    SecDim Learn provides tutorial-based courses (mixing video, text and hands-on
    lab topics) covering secure coding, secure design, vibe coding security, devsecops,
    and cloud security. Many courses are complementary or prerequisite to hands-on,
    scored SecDim Play challenges/labs.

    Use this tool to:
    - Browse the SecDim Learn course catalogue
    - Find courses related to a topic, language, or technology (e.g. "OWASP Top 10",
      "fuzzing", "Python")

    Args:
        search: Optional search term to filter courses by title, description, or tags.
            If omitted, returns the full course catalogue.

    Returns:
        Dictionary with a "courses" list. Each course includes its title, description,
        image, slug, tags, numeric "level" (1=beginner, 2=intermediate, 3=advanced) and
        a "difficulty" label.
        Use get_learn_course with a course's slug to view its syllabus of topics.
    
- `search_play_challenges`: 
    Return a list of hands-on SecDim Play secure coding challenges (labs) related to a detected or suspected vulnerability.

    SecDim Play challenges are scored, hands-on labs: find and fix a real vulnerability
    in running code to earn points and badges.

    Use this tool to:
    - Find hands-on SecDim Play labs for specific vulnerabilities like XSS, SQL Injection, etc.
    - Explore OWASP Top 10 vulnerabilities and related labs
    - Provide additional resources and guides to help developers improve their secure coding skills

    For structured tutorial content (text, video, and lab-based courses) on the same
    vulnerability, use search_learn_courses (SecDim Learn) instead or in addition.

    Args:
        search: Search term for the vulnerability (e.g., 'xss', 'sql-injection', 'injection')
        cwe: Common Weakness Enumeration (CWE) ID to filter by
        owasp: OWASP category to filter by (e.g., 'a03:2021')
        technology: Technology or framework to filter by (e.g., 'react', 'django')
        language: Programming language to filter by (e.g., 'javascript', 'python')
        difficulty: Difficulty level to filter by (e.g., 'trivial', 'easy', 'medium', 'hard')
        type: Challenge format to filter by (e.g., 'battle', 'exploitation', 'incident-response')
        mitre: MITRE ATT&CK ID to filter by (e.g., 'T1102.003')

    SecDim Play challenges (labs) each simulate a real vulnerability. They are scored according to
    the following difficulty levels:
        - Trivial: Easy to find and path vulnerabilities. It can be completed in 5-10 minutes. 1-15 points.
        - Easy: Known vulnerabilities. It can be completed in 10-30 minutes. 16-35 points.
        - Medium: Known vulnerabilities but require defence-in-depth patch. It can be completed in 20-30 minutes. 36-70 points.
        - Hard: Hard to find or patch vulnerabilities. It can be completed in 30-60 minutes. 71-100 points.
        - Battle: SecDim Flagship attack and defence challenge that require both vulnerability exploitation and mitigation skills. Points are accumulated.

    Returns:
        Dictionary containing SecDim Play labs results or error
        If there are no results, user can perform a manual search on the SecDim Play frontend (SECDIM_PLAY_FRONTEND_BASE_URL)
    
