Skip to main content
Glama

Marble MCP Server

An MCP (Model Context Protocol) server that generates learning project links for the Marble platform (withmarble.io). This server enables Claude Code to analyze codebases and suggest relevant learning projects with direct links to create them on Marble.

Features

  • Codebase Analysis: Analyzes your current codebase to understand technologies and patterns

  • AI-Generated Projects: Suggests relevant learning projects based on code analysis

  • Interactive Slides: Generate links to interactive learning slides based on your code

  • Marble Platform Integration: Generates properly formatted links to create projects on withmarble.io

  • Customizable: Specify topics, difficulty levels, and code context for tailored suggestions

  • Short URLs: Stores prompts in a database for clean, shareable links (optional)

Installation

Claude Code

Run claude mcp add marble npx marble-mcp-server --scope user.

Cursor

Modify your ~/.cursor/mcp.json to be like:

{
  "mcpServers": {
    "marble": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "marble-mcp-server"
      ],
      "env": {
      }
    }
  }
}

Augment Code

  1. Go to the Augment Settings.

  2. Under "Tools", scroll down until you find "MCP". Click the "Import from JSON" button.

  3. Paste the following JSON snippet:

{
  "mcpServers": {
    "marble": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "marble-mcp-server"
      ],
      "env": {
      }
    }
  }
}

Usage

1. Suggest Learning Projects

Ask Claude Code to suggest projects for learning something in your codebase:

"I want to learn more about React hooks. Can you suggest some projects?"

"What are some projects I could build to learn the authentication patterns used here?"

"Suggest beginner projects for learning the database design in this app"

Claude Code will:

  1. Use the suggest_learning_projects tool

  2. Analyze your codebase for relevant code

  3. Generate 3 project ideas

  4. Create Marble platform links for each project

2. Generate Interactive Learning Slides

Ask Claude Code to generate interactive slides to explain concepts in your codebase:

"Create slides explaining how React hooks work in this codebase"

"Generate slides about the authentication flow in this app"

"Make slides explaining the database schema"

Claude Code will:

  1. Use the generate_slides_link tool

  2. Read relevant code from your codebase

  3. Create a comprehensive prompt with code examples

  4. Save the prompt to the database (if configured)

  5. Return a link to interactive slides on Marble

You can also ask Claude Code to generate a link for a specific project:

"Generate a Marble link for a project about building a REST API with Express"

Configuration

Environment Variables

The generate_slides_link tool requires the following environment variables:

  • SUPABASE_URL: Your Supabase project URL (required)

  • SUPABASE_KEY: Your Supabase publishable key (required, starts with sb_publishable_...)

    • Find it in: Supabase Dashboard → Settings → API → Project API keys

Note: The SUPABASE_URL and SUPABASE_KEY environment variables are required for the generate_slides_link tool to work. The tool will error if these are not configured.

Security: Use your Supabase publishable key (sb_publishable_...), not the service role or secret key. The publishable key is:

  • ✅ Safe to use in CLIs, MCP servers, and public code

  • ✅ Can be rotated independently without downtime

  • ✅ Restricted by Row Level Security policies

  • ✅ The modern, recommended approach (replaces the legacy anon JWT key)

Important: Use the publishable key (sb_publishable_...), not secret or service role keys. Benefits:

  • ✅ Safe to expose in CLIs, scripts, and MCP servers

  • ✅ Easy rotation without downtime

  • ✅ Modern best practice (replaces legacy JWT-based anon key)

The publishable key is restricted by Row Level Security (RLS) policies and can only:

  • ✅ Insert new prompts into slide_prompts

  • ✅ Read prompts from slide_prompts

  • ❌ Cannot update, delete, or access any other tables

Note: If these variables are not set, the generate_slides_link tool will return an error. The suggest_learning_projects and generate_marble_link tools do not require database configuration.

Database storage provides:

  • Creates shorter, more shareable URLs (e.g., withmarble.ai/learn?prompt_id=abc123)

  • Avoids URL length limitations with long prompts

  • Improves link reliability across different platforms

If not provided, the server will fall back to encoding prompts directly in URLs.

Database Setup

If using Supabase integration, you'll need to create the slide_prompts table:

CREATE TABLE slide_prompts (
  prompt_id UUID PRIMARY KEY,
  prompt TEXT NOT NULL,
  created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW()
);

Tools Provided

suggest_learning_projects

Instructs Claude Code to analyze the codebase and suggest learning projects.

Parameters:

  • topic (required): What to learn (e.g., "React hooks", "authentication")

  • codeContext (optional): Specific files/directories to analyze

  • difficulty (optional): "Beginner", "Intermediate", or "Advanced"

Example:

{
  "topic": "state management",
  "codeContext": "src/store",
  "difficulty": "Intermediate"
}

Generates a Marble platform link from project data.

Parameters:

  • project (required): Project data object with:

    • id: Unique ID (timestamp)

    • title: Project title

    • description: Detailed description

    • category: Primary language/framework

    • difficulty: "Beginner", "Intermediate", or "Advanced"

    • timeEstimate: e.g., "2 hr", "90 min"

    • technologies: Array of technologies

    • targetSkills: Array of skills to learn

Example:

{
  "project": {
    "id": 1701234567890,
    "title": "Build a Task API",
    "description": "Create a RESTful API for managing tasks with CRUD operations and authentication.",
    "category": "Node.js",
    "difficulty": "Intermediate",
    "timeEstimate": "2 hr",
    "technologies": ["Express", "MongoDB", "JWT"],
    "targetSkills": ["REST APIs", "Authentication", "Database Design"]
  }
}

Generates a link to interactive learning slides on Marble.

Parameters:

  • query (required): A comprehensive prompt that includes:

    • The main topic or concept to explain

    • Relevant code snippets from the codebase

    • Specific implementation details

    • Context about how the concept is used

Example:

{
  "query": "Explain React hooks with examples from our codebase. Here's how we use useState in UserProfile.tsx: [code snippet]. Here's how we use useEffect in DataFetcher.tsx: [code snippet]. Focus on explaining the dependency array and cleanup functions."
}

Returns: A markdown link like 🎓 [Learn: Explain React hooks...](https://withmarble.ai/learn?prompt_id=abc123)

Generated links follow this format:

https://withmarble.io/projects/plan?projectData={urlEncodedJSON}

The JSON structure includes all project metadata, which is decoded by the Marble platform to populate the project creation page.

Development

Watch Mode

npm run watch

Rebuild

npm run build

Example Interaction

User: "I want to learn about the React patterns used in this codebase"

Claude Code:

  1. Uses suggest_learning_projects with topic "React patterns"

  2. Searches codebase for React components using Glob/Grep

  3. Reads relevant files to understand patterns

  4. Generates 3 project ideas:

    • Beginner: "Component Composition with Props"

    • Intermediate: "Custom Hooks for Data Fetching"

    • Advanced: "Compound Components Pattern"

  5. Uses generate_marble_link for each project

  6. Presents projects with Marble links

Result: User gets 3 clickable links to create these projects on withmarble.io

How It Works

  1. User asks for learning projects in Claude Code

  2. MCP tool is invoked by Claude Code

  3. Claude Code analyzes codebase using its file reading tools

  4. Projects are generated based on code analysis

  5. Links are created using the Marble platform URL format

  6. User clicks link to start the project on withmarble.io

License

MIT

Available Tools

3 tools
suggest_learning_projectsA

Use this tool when the user wants to PRACTICE or BUILD something to learn. Trigger this for ANY mention of: 'projects', 'marble projects', 'practice', 'exercises', 'build something', 'hands-on', 'try building', 'create a project', 'project ideas', 'what should I build', 'learn by doing', or similar learning-by-building phrases. This tool instructs the AI agent to: 1) Read relevant code from the codebase, 2) Analyze patterns and technologies used, 3) Generate project ideas that help learn those technologies, 4) Return formatted Marble platform links.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYesWhat the user wants to learn (e.g., 'React hooks', 'authentication', 'database design')
codeContextNoOptional: Specific files or directories to analyze (e.g., 'src/components', 'api/auth.js')
difficultyNoPreferred difficulty level for projects

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It outlines the tool's process steps (read code, analyze patterns, generate ideas, return links), which adds useful context beyond basic functionality. However, it lacks details on potential limitations, error handling, or performance aspects like rate limits or authentication needs, leaving some behavioral traits unclear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded, starting with usage triggers and then detailing the tool's steps. Each sentence serves a purpose: the first sets context, the second lists triggers, and the third explains the process. However, it could be slightly more concise by integrating the trigger list more smoothly, but overall it's efficient with minimal waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 parameters, no output schema, no annotations), the description is moderately complete. It explains the tool's purpose, usage, and process, but lacks details on output format (beyond 'formatted Marble platform links'), error cases, or dependencies. Without annotations or output schema, more behavioral context would improve completeness, but it's adequate for basic understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, so the input schema already documents all parameters (topic, codeContext, difficulty) with descriptions and enums. The description doesn't add any additional meaning or examples beyond what the schema provides, such as clarifying how parameters interact or affect output. Thus, it meets the baseline but doesn't enhance parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: to generate project ideas for learning by analyzing code patterns and technologies. It specifies the verb 'instructs the AI agent to' with steps like 'Read relevant code', 'Analyze patterns', and 'Generate project ideas'. However, it doesn't explicitly differentiate from sibling tools like generate_marble_link or generate_slides_link, which might serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidelines, stating 'Use this tool when the user wants to PRACTICE or BUILD something to learn' and listing specific trigger phrases such as 'projects', 'practice', 'build something', etc. This gives clear context for when to invoke the tool, though it doesn't mention when not to use it or alternatives, but the trigger list is comprehensive enough for effective selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv1.0.28
    • First observedgenerate_marble_link
    • First observedgenerate_slides_link
    • First observedsuggest_learning_projects

TDQS

A3.8/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: generate_marble_link creates links for existing projects, generate_slides_link creates links for explanatory slides, and suggest_learning_projects suggests new project ideas for practice. There is no overlap in functionality, and the descriptions clearly differentiate when to use each tool.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with snake_case: generate_marble_link, generate_slides_link, and suggest_learning_projects. The naming is predictable and readable throughout the set.

Tool Count3/5

With only 3 tools, the server feels thin for a learning platform domain. While the tools cover key functions (linking projects, slides, and project suggestions), the scope might benefit from additional tools for managing or customizing learning content, making the count borderline for the apparent purpose.

Completeness4/5

The tool set covers core learning workflows: generating links for projects and slides, and suggesting projects for practice. However, there are minor gaps such as tools for updating or deleting links, tracking progress, or integrating with other learning resources, which agents might need to work around.

Related MCP Connectors