Scaffold, build, and publish TypeScript MCP servers to npm — conversationally
About
The TypeScript MCP Creator lets you build and publish MCP servers to npm entirely through conversation with your AI assistant. Check your environment, pick a package name, scaffold a complete project with tool stubs, add tools incrementally, build, publish to npm, create a GitHub repo, and generate a LAUNCHGUIDE.md for marketplace submission — all without leaving your AI editor. The TypeScript companion to mcp-creator-python.
Security Report
Valid MCP server (3 strong, 7 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry.
10 files analyzed · 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
Permissions Required
This plugin requests these system permissions. Most are normal for its category.
How to Install
Add this to your MCP configuration file:
{
"mcpServers": {
"mcp-creator-typescript": {
"args": [
"-y",
"mcp-creator-typescript"
],
"command": "npx"
}
}
}Getting Started
Once installed, try these example prompts and explore these capabilities:
- 1"Check if my environment is ready to build MCP servers"
- 2"Is the npm name 'my-weather-mcp' available?"
- 3"Scaffold a new MCP server called 'my-weather-mcp' with a get_forecast tool"
- 4"Add a new tool called 'get_alerts' to my project"
- 5"Build and publish my MCP server to npm"
- 6"Create a GitHub repo for my project and push it"
- 7"Generate a LAUNCHGUIDE.md for marketplace submission"
- 8Tool: check_setup — Verify Node.js, npm, git, gh CLI
- 9Tool: check_npm_name — Check npm package name availability
- 10Tool: scaffold_server — Generate complete TypeScript MCP project
- 11Tool: add_tool — Add a tool to an existing project
- 12Tool: build_package — Run npm run build (tsup)
- 13Tool: publish_package — Publish to npm
- 14Tool: setup_github — Create GitHub repo and push
- 15Tool: generate_launchguide — Generate LAUNCHGUIDE.md
Documentation
View on GitHubFrom the project's GitHub README.
Scaffold, build, and publish TypeScript MCP servers to npm. The TypeScript companion to mcp-creator-python.
Installation
{
"mcpServers": {
"mcp-creator-typescript": {
"command": "npx",
"args": ["-y", "mcp-creator-typescript"]
}
}
}
Tools
| Tool | Description |
|---|---|
get_creator_profile | Load persistent profile (setup state, npm username, project history) |
update_creator_profile | Save profile updates (npm/GitHub username, add project) |
check_setup | Verify Node.js ≥ 18, npm, git, gh CLI, npm auth |
check_npm_name | Check npm package name availability |
scaffold_server | Generate complete TypeScript MCP server project from tool definitions |
add_tool | Add a new tool to an existing scaffolded project |
build_package | Run npm run build (tsup) |
publish_package | Run npm publish to npm (project directories only) |
setup_github | git init + gh repo create (always private) + push |
generate_launchguide | Generate LAUNCHGUIDE.md for MCP Marketplace submission |
How It Works
check_setup— Verify your environment has all required toolscheck_npm_name— Find an available npm package namescaffold_server— Generate a complete project with tool stubs, tests, and config- Implement — Replace the TODO stubs in
src/tools/with your real logic build_package— Build with tsuppublish_package— Publish to npmsetup_github— Create a private GitHub repo (making it public is your own step afterwards)generate_launchguide— Create LAUNCHGUIDE.md for marketplace submission
Safety limits
These tools are called by a language model, so the directory they are pointed at, and every argument, is treated as untrusted input.
setup_github,publish_package,build_packageandadd_toolonly run in a project directory: it must contain apackage.json, and must not be your home directory, a directory above it, or a filesystem root. Directories are compared by identity, so a different spelling of the same directory (letter case, a symlink) is still recognised.setup_githubnever creates a public repository.private: falseis accepted and ignored. Making a repository public is your own step:gh repo edit <owner>/<name> --visibility public --accept-visibility-change-consequences(a free marketplace listing needs a public repository). It also never pushes to a repository that already exists.setup_githubstages every file in the directory, so it requires a.gitignorethat is there already and that works: git must ignorenode_modules/and.env. It refuses rather than creating or editing one.setup_githubrefuses when a file that looks like a secret would be committed, is already tracked, or is anywhere in the existing git history (a file deleted or ignored later is still in the commits that get pushed). Names treated as secrets:.env,.env.*,.envrc,*.pem,*.key,*.p12,*.pfx,*.p8,*.ppk,*.keystore,*.jks,*.kdbx,*.tfvars,*.tfstate,id_rsa*,id_dsa*,id_ecdsa*,id_ed25519*,credentialsandcredentials.{json,ini,csv,yml,yaml,txt,xml},service-account*.json,.npmrc,.pypirc,.netrc,.pgpass,.htpasswd,.git-credentials,kubeconfig,.aws/credentials,.docker/config.json. Git decides whether a file would be committed (git check-ignore). The refusal names the files.setup_githubonly acts on the project's own.gitdirectory. A linked worktree, a submodule checkout, or a.gitthat is a file or a link is refused, because staging there would change another repository.- A template of a secret file is allowed by name: any of the names above with
.example,.sample,.templateor.distin it (.env.example,.env.template,service-account.example.json). Its content is checked instead: a value shaped like a live credential (a private-key block, or a well-known token prefix followed by a long token) is refused, naming the file and line. Placeholders and empty values are fine. publish_packagepacks the project once into a temporary directory, refuses if any file in that package looks like a secret (or is a template holding a live-looking credential), and publishes that exact tarball. No lifecycle script runs, so build first withbuild_package.build_packageandpublish_packagerefuse whendistornode_modulesis a symbolic link: the build empties its output directory before writing to it.- No tool writes through a symbolic link or over a file that has a second hard link, and an existing file is replaced by writing a new one and renaming it into place.
- git, gh and npm are started without any
GIT_*ornpm_config_*environment variable and withoutNODE_OPTIONS, so a strayGIT_DIRor registry setting cannot redirect them. Your saved logins and tokens (~/.gitconfig,gh auth,~/.npmrc,GH_TOKEN,NPM_TOKEN) are used as usual. scaffold_server,add_toolandgenerate_launchguideonly write inside the target project directory. A package name, tool name or symlink that leads outside it is refused, and nothing is written.scaffold_servernever overwrites: it refuses a target directory that already exists and is not empty. To regenerate, scaffold into a new directory.add_toolextends an existing project and refuses a tool whose file is already there.- Descriptions and other free text are written into the generated
README.mdandLAUNCHGUIDE.mdas text. They cannot add a heading, a code block, a link, raw HTML, or a section of the launch guide. - Names are checked before anything is generated. Package name: lowercase letters, digits,
-,_,., optional@scope/. Tool name: letters, digits,_,-, starting with a letter, at most 64 characters. Parameter names: plain identifiers. Repository name: letters, digits,-,_,., no owner prefix.
Generated Project Stack
@modelcontextprotocol/server(SDK v2, stateless MCP 2026-07-28) +zod: MCP server + parameter validation- Remote servers add
@modelcontextprotocol/express,@modelcontextprotocol/nodeandexpress, and requireMCP_ALLOWED_HOSTSto start tsup: fast TypeScript bundler (ESM, shebang for local servers, node20)vitest— Test runner- Optional:
@mcp_marketplace/license— License SDK for paid servers
Tool Definition Format
[
{
"name": "get_weather",
"description": "Get current weather for a city",
"parameters": [
{ "name": "city", "type": "string", "required": true, "description": "City name" },
{ "name": "units", "type": "string", "required": false, "description": "Temperature units (C or F)" }
],
"returns": "JSON weather data"
}
]
Rules for a definition (anything else is refused with a message, before any file is written):
name: letters, digits,_and-, starting with a letter.get_weatherandget-weatherboth generate a function calledgetWeather, so a project can hold only one of them.type: one ofstring,str,integer,int,number,float,boolean,bool.required:trueorfalse. Omitted meanstrue.- Parameter names are plain identifiers and may not be a name the generated code already uses (for example
result,JSON,constructor). - The generated function takes required parameters first, then optional ones, each group in the order you declared it. The generated call site and test use the same order.
- Remote scaffolds use a Docker image name derived from the package name (
@acme/weatherbecomesacme-weather).
Reviews
No written reviews yet. Be the first!
More Developer Tools MCP Servers
Git
Freeby Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
Fetch
Freeby Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
Worldmonitor
Freeby Koala73 · Developer Tools
Live markets, conflicts, country risk, chokepoints, energy, and China decision signals. 93 tools.
Paperclip
Freeby Paperclipai · Developer Tools
Trending hip-hop artist momentum scores across four cultural dimensions.
Toleno
Freeby Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
mcp-creator-python
Freeby mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.