惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志
G
Google Developers Blog
J
Java Code Geeks
Blog — PlanetScale
Blog — PlanetScale
大猫的无限游戏
大猫的无限游戏
云风的 BLOG
云风的 BLOG
Vercel News
Vercel News
L
LangChain Blog
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Stack Overflow Blog
Stack Overflow Blog
P
Proofpoint News Feed
腾讯CDC
博客园_首页
博客园 - 聂微东
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
D
DataBreaches.Net
Microsoft Security Blog
Microsoft Security Blog
有赞技术团队
有赞技术团队
博客园 - 叶小钗

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
Deploy a Real MCP Server in Two Minutes — Naftiko Shipyar...
Kin Lane · 2026-05-09 · via DEV Community

The Naftiko Framework's Shipyard tutorial walks through eleven capability YAMLs — mock MCP at one end, a fully wired domain-driven aggregate at the other. Step 1 is what you run to prove the engine reads YAML. Step 11 is what you run to feel what the framework actually produces.

This post is about deploying step 11 with a single click.

Run in Cloudflare

What gets deployed

Three protocol adapters from one capability YAML:

Adapter Path Tools / resources
MCP POST /mcp list-ships, get-ship, list-legacy-vessels, create-voyage, get-ship-with-crew, get-voyage-manifest
REST /api/... Same domain as REST resources
SKILL /skill Skill groups for structured agent discovery

Backed by two consumed APIs:

  • Maritime Registry at mocks.naftiko.net/rest/naftiko-shipyard-maritime-registry-api/1.0.0-alpha2 — bearer auth
  • Legacy Dockyard at mocks.naftiko.net/rest/naftiko-shipyard-legacy-dockyard-api/1.0.0-alpha2 — API key auth

Both are public Naftiko mocks. The deploy ships dummy tokens that work against them — no upstream credentials needed.

The MCP server itself requires a bearer token (dummy sk-mcp-YYYYYYYYYYYY ships in the deploy).

The Cloudflare shape

The Naftiko Framework engine ships as ghcr.io/naftiko/framework:latest. Cloudflare Containers runs Docker images behind a Worker, brokered by a Durable Object. Five files in the deploy repo do the work — the capability YAML, three shared imports, a Dockerfile, a wrangler config, and a small Worker that proxies traffic to the right port (/mcp → 3001, /skill → 3003, everything else → REST 3002).

The same shape powers manage-companies in production today. The Shipyard end-to-end deploy is the production pattern, sized to the canonical tutorial example.

Click → live URL

Click the button. Cloudflare authenticates you, forks the repo, provisions a Worker plus a Container, builds the Dockerfile, and assigns you a *.workers.dev hostname. Two to three minutes from click to running.

When it finishes you have:

  • https://<your-worker>.workers.dev/ — landing page
  • https://<your-worker>.workers.dev/mcp — MCP server
  • https://<your-worker>.workers.dev/api/... — REST adapter
  • https://<your-worker>.workers.dev/skill — Skill server

That MCP URL is what you give to your AI tools.

Wiring the MCP endpoint into your AI tools

Substitute your worker URL where you see <your-worker> below. Bearer token defaults to sk-mcp-YYYYYYYYYYYY unless you've changed it.

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (Mac) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "naftiko-shipyard": {
      "type": "streamable-http",
      "url": "https://<your-worker>.workers.dev/mcp",
      "headers": {
        "Authorization": "Bearer sk-mcp-YYYYYYYYYYYY"
      }
    }
  }
}

Enter fullscreen mode Exit fullscreen mode

Restart Claude Desktop. Tools appear in the picker.

Claude Code

claude mcp add --transport http naftiko-shipyard https://<your-worker>.workers.dev/mcp \
  --header "Authorization: Bearer sk-mcp-YYYYYYYYYYYY"

Enter fullscreen mode Exit fullscreen mode

Confirm with claude mcp list.

ChatGPT

ChatGPT supports remote MCP servers through Custom Connectors (Pro and Enterprise plans). Settings → Connectors → Custom → Add custom connector. Server URL: https://<your-worker>.workers.dev/mcp. Authentication: Custom header — name Authorization, value Bearer sk-mcp-YYYYYYYYYYYY.

Gemini CLI

Edit ~/.gemini/settings.json:

{
  "mcpServers": {
    "naftiko-shipyard": {
      "httpUrl": "https://<your-worker>.workers.dev/mcp",
      "headers": {
        "Authorization": "Bearer sk-mcp-YYYYYYYYYYYY"
      }
    }
  }
}

Enter fullscreen mode Exit fullscreen mode

Restart gemini. Confirm with /mcp list.

Why this matters past the demo

The Shipyard end-to-end is a sample. The interesting thing is that it isn't shaped any differently from a real Naftiko capability. Same one-click pattern — capability YAML in a folder, Dockerfile pulling the framework image, Worker proxying ports, Durable Object brokering a container — runs manage-companies in production. Replace the YAML in your fork, redeploy, and you have a different MCP server at the same URL.

That is the actual unlock. A public MCP endpoint that you control, callable from Claude, Claude Code, ChatGPT, and Gemini.