From Zero to Claude Code

How I set up a full AI dev environment from scratch — SSH keys, MCP servers, GitHub, Canva, and an Astro site. Documented as I went.

One error message. One afternoon. A fully wired AI dev environment.

Here’s the unfiltered version of how that went.


The wall: SSH authentication

I tried to add a plugin to Claude Code and immediately got this:

git@github.com: Permission denied (publickey).

No SSH keys existed on my machine. Zero. So I built them from scratch.

ssh-keygen -t ed25519 -C "your@email.com"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
cat ~/.ssh/id_ed25519.pub

Copied that last output, pasted it into GitHub → Settings → SSH and GPG keys. Then verified:

ssh -T git@github.com

Got the success message. Moved on.


The plugin marketplace

With SSH sorted, I added the official Anthropic plugin marketplace:

/plugin marketplace add anthropics/claude-code
/reload-plugins

After reload: 23 plugins, 15 skills, 22 agents, 5 hooks. That number hitting all at once felt like unlocking a cheat code.

One thing that tripped me up: running /skills showed “No skills found.” Looked broken. It’s not — plugin skills load automatically based on context. They don’t show up in a list. Took me longer than I’d like to admit to figure that out.


GitHub MCP: the config trap

I wanted GitHub wired directly into Claude so I could manage repos without leaving the terminal. Ran the setup, got this:

Invalid MCP server config for 'github': Missing environment variables: GITHUB_PERSONAL_ACCESS_TOKEN

I had the token. The problem was where I put it. I’d added it to ~/.claude/settings.json — which does nothing for MCP servers. Turns out MCP servers have to live in ~/.claude.json or be added through the CLI.

The fix was one command:

claude mcp add github --scope user -- npx -y @modelcontextprotocol/server-github
github: ✔ Connected

That’s the kind of thing that isn’t in any tutorial because everyone assumes you already know it.


Canva MCP: skip the manual config

I tried connecting Canva by passing a URL directly. Got invalid token errors, missing auth errors, the works.

The actual solution was embarrassingly simple: go to claude.ai → Settings → Integrations → connect Canva there. That’s it. 30 Canva tools showed up immediately. Don’t try to wire it manually.


The Astro site (Node version hell)

I wanted a blog. Ran the standard scaffold:

npm create astro@latest site -- --template blog --typescript strict --install --no-git --yes

It worked — but the dev server wouldn’t start. My Node version (v20.10.0) is too old for Astro 5, which requires Node ≥22.12.0. No version manager on this machine either.

Fix was to pin to Astro 4, which supports Node 20:

npm install astro@^4 @astrojs/mdx@^3 @astrojs/sitemap@^3

Then the template itself used Astro 5 APIs throughout — render(post) instead of post.render(), post.id instead of post.slug, content config in the wrong place. Went through and corrected each one. The site is running at localhost:4321 now and you’re reading this on it.


What I ended up with

By the end of the session:

None of this was hard in hindsight. It was just a series of walls that required knowing the right thing to try next. That’s what I’m documenting here.


What’s next

Next post will be a Salesforce Flow walkthrough — something I actually build at work, broken down so it makes sense even if you’re newer to the platform.

After that: a real about page, and probably a post on how I’m using Claude Code to draft and publish all of this.

More soon.

← Back to writing Built with Claude Code