Deploy simple web pages and HTML apps to Deno Deploy using a bundled Python script that calls the Deno REST API directly. No MCP tool required.
Before deploying, the user must create a Deno Subhosting organization and retrieve their credentials:
Then save them as config files under ~/.config/deno-deploy/:
mkdir -p ~/.config/deno-deploy
echo "your_token_here" > ~/.config/deno-deploy/access_token
echo "your_org_id_here" > ~/.config/deno-deploy/org_id
If these files don't exist, the deploy script will print a clear error with setup instructions. Direct the user to dash.deno.com/subhosting/new_auto to get started.
Before writing code, think about:
For simple pages: serve everything from a single main.ts file with inline HTML.
All Deno Deploy apps must export a fetch handler:
export default {
async fetch(req: Request): Promise<Response> {
const html = `<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>My App</title>
</head>
<body>
<!-- content here -->
</body>
</html>`;
return new Response(html, {
headers: { "Content-Type": "text/html; charset=utf-8" },
});
},
};
require(), no fs, no pathhttps://cdn.tailwindcss.com)main.tscharset=utf-8 for HTML responsesnew URL(req.url).pathname for multi-route apps| Purpose | URL |
|---|---|
| --- | --- |
| Tailwind CSS | https://cdn.tailwindcss.com |
| Alpine.js | https://cdn.jsdelivr.net/npm/alpinejs@3/dist/cdn.min.js |
| Chart.js | https://cdn.jsdelivr.net/npm/chart.js |
| Marked (markdown) | https://cdn.jsdelivr.net/npm/marked/marked.min.js |
Write the TypeScript code to a temporary file, e.g. /tmp/main.ts:
cat > /tmp/main.ts << 'EOF'
export default {
async fetch(req: Request): Promise<Response> {
...
},
};
EOF
Run the bundled deploy script:
python scripts/deploy.py \
--name <project-name> \
--code /tmp/main.ts
Project naming tips:
birthday-card, sales-dashboard, quiz-gameapp or testThe script will:
After the deploy script runs, you MUST verify the deployment was successful:
"status" should NOT be "failed". If it is, the code has errors — fix and redeploy."pending", wait a few seconds and proceed to the next check.```bash
curl -s -o /dev/null -w "%{http_code}" https://
```
export default { fetch } handlerrequire, fs, etc.)Do NOT tell the user the deployment succeeded until you have confirmed it with curl.
After a verified successful deployment, always:
Example:
> Your page is live at https://your-project.deno.dev
>
> It shows [brief description]. Let me know if you'd like to change anything!
— browsers may render in quirks mode without itexport default { fetch } — the app won't start without it共 1 个版本