metagpt's manual install names a different repository, and pip alone leaves you without node
GitHub describes it as 🌟 The Multi-Agent Framework: First AI Software Company, Towards Natural Language Programming. The repository metadata lists Python as its primary language. The metadata lists the MIT license. This article stays within the project description and details documented in the GitHub repository README.
At a glance
- What is it?
- MetaGPT is a Python multi-agent framework whose core idea is Code = SOP(Team): a one line requirement goes in and a fixed set of documents and code comes out. Reading the packaging closely turns up three things worth knowing before you install. The manual install lines point at a different GitHub organisation than the repository itself, the page requires node and pnpm before you can use what pip installed, and the newest tagged release is v0.8.2 from 2025-03-09 while the last push was on 2026-01-21.
- Who is it for?
- Adopt MetaGPT if you want a fixed software-company procedure with the artefact set chosen for you, and not if you want to choose which documents your run produces, because Code = SOP(Team) decides the output shape before the model writes anything. Four things to check first.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Activity is slowing. The repository last received commits 8 months ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The manual install lines name a different organisation than the repository
The install block offers three routes, and only the first is organisation-agnostic:
pip install --upgrade metagpt
# or `pip install --upgrade git+https://github.com/geekan/MetaGPT.git`
# or `git clone https://github.com/geekan/MetaGPT && cd MetaGPT && pip install --upgrade -e .`The repository you are reading is FoundationAgents/MetaGPT. Both manual lines point at geekan/MetaGPT, and the same older path appears twice more on the page: the link to the example configuration is a blob URL under geekan, and the GitHub Issues link for technical inquiries points at geekan/metagpt/issues.
The PyPI line is fine, because a package name does not carry an organisation. The consequence is for anyone installing from source or filing an issue by copying a link: you will be working from a path that is not the repository the documentation sits in. Whether that path still resolves, and whether it resolves to the same history, is not something the page states, so do not assume it. Use the path you arrived through, and check that the example configuration you diff against is the one in the branch you actually installed.
Python below 3.12 is a hard bound, and node and pnpm are separate prerequisites
The requirement is stated as Python 3.9 or later, but less than 3.12, checked with `python --version`. The suggested way to satisfy it is to make a dedicated environment:
conda create -n metagpt python=3.9 && conda activate metagptThe upper bound is the half that matters. On a machine with Python 3.12 or 3.13 this is a refusal rather than a warning, and the project's own answer is to create a 3.9 environment, which means the tool lives beside your other work rather than inside it.
Then there is the prerequisite that surprises people. The page says to install node and pnpm before actual use, immediately after the pip block. So the pip install does not leave you with a working tool, it leaves you with a Python package whose runtime needs a JavaScript toolchain that pip knows nothing about. The packaging confirms it: setup.py defines a custom command that shells out to `npm install -g @mermaid-js/mermaid-cli`. Budget for two runtimes and one constraint, and check your interpreter version before anything else, because that is the one that cannot be worked around.
The mermaid install step catches its own failure and carries on
setup.py defines a custom setuptools command whose entire job is to install the mermaid CLI. Its run method calls `npm install -g @mermaid-js/mermaid-cli` in a subprocess, wraps the call in a try, and on CalledProcessError prints a line beginning with the error output. It does not re-raise.
So the install completes whether or not mermaid-cli was installed. There is no non-zero exit and no recorded failure, because the exception is swallowed and the message is only printed.
The consequence is delayed and misattributed. If your run needs to render a diagram, the missing piece is a Node toolchain problem, and you will discover it when a diagram does not appear rather than when you installed. The install log holds one printed line, which is easy to miss in a long pip transcript. If diagram output matters to what you are generating, treat the mermaid CLI as a separate step you verify yourself after installing, rather than something the installer handled. This is also the clearest illustration of the page's own warning that node and pnpm must be in place first.
Code = SOP(Team) fixes the artefact set before the model writes anything
The core philosophy is written as an equation: `Code = SOP(Team)`, with the explanation that standard operating procedures are materialised and applied to teams composed of LLMs. In practice a run takes a one line requirement and produces user stories, competitive analysis, requirements, data structures, APIs and documents. Internally the roles are product managers, architects, project managers and engineers, and the schematic is labelled as gradually implementing.
That is the appeal and the constraint in one sentence. You are not choosing which artefacts you get; the procedure decides, and the model fills them in.
The consequence is that changing the shape of the output is not a prompt change. If your team needs a different document set, or skips competitive analysis, that is a change to the SOP, and the routes the project offers for it are the two development guides it links, Agent 101 and MultiAgent 101, plus the examples directory, which carries a dozen scripts including build_customized_agent.py and build_customized_multi_agents.py. Read those before you conclude the default procedure is too rigid, because the extension point is a different SOP rather than a different prompt.
The base requirements already include two vector databases and a browser stack
requirements.txt is a long list of exact pins, and it is not a minimal set. It includes faiss_cpu==1.7.4, qdrant-client==1.7.0 and meilisearch==0.21.0, so two vector stores and a search engine are installed whether or not you touch retrieval. It also brings playwright>=1.26 with a comment that it is used by the web scraping tool, and curl-cffi, socksio and websocket-client for network work.
Alongside those sit aiohttp==3.8.6, pandas==2.1.1, numpy~=1.26.4, openai~=1.64.0, anthropic==0.47.2, google-generativeai==0.4.1 and zhipuai~=2.1.5, so several model providers are pinned at once, plus a Jupyter stack with nbclient, nbformat, ipython and ipykernel, and pylint~=3.0.3 and grep-ast as development tools.
The consequence is a dependency surface large enough that conflicts with the rest of your environment are a realistic outcome rather than a possibility. If you only want the software company path, you are still paying for the retrieval and browser paths, and you are paying for them at exact versions. Install it into the dedicated environment the page recommends and keep it there, because the moment you merge it into a shared environment the pins become your problem.
The rag extra is pinned across fifteen packages, and the ocr extra is commented out
Optional capability lives in extras_require, and the retrieval one is pinned hard. The rag extra lists llama-index-core==0.10.15, four embedding packages for Azure OpenAI, OpenAI, Gemini and Ollama at 0.1.6, 0.1.5, 0.1.6 and 0.1.2, llama-index-llms-azure-openai==0.1.4, llama-index-readers-file==0.1.4, llama-index-retrievers-bm25==0.1.3, vector stores for faiss, elasticsearch and chroma at 0.1.1, 0.1.6 and 0.1.6, three rerankers at 0.1.4, 0.1.1 and 0.1.2, and docx2txt==0.8. The search extras are narrower, pinning google-api-python-client==2.94.0 and duckduckgo-search~=4.1.1.
Below them sits an ocr extra that is commented out, holding paddlepaddle, paddleocr and tabulate at fixed versions.
Two consequences. The rag extra is reproducible right up until one of those fifteen packages needs a security fix, at which point you are editing setup.py rather than opening a pull request. And the ocr extra is present in the file but disabled, while the examples directory still ships invoice_ocr.py, so there is a runnable-looking example whose optional dependency is not installable through the extras as shipped. Check what an example imports before you plan to run it.
The newest release is v0.8.2 from March 2025 and the last push was 2026-01-21
The three most recent releases are v0.8.0 on 2024-03-29, which introduced Data Interpreter, RAG integration and expanded model support, v0.8.1 on 2024-04-22, and v0.8.2 on 2025-03-09. The last push to main was on 2026-01-21, and the repository is not archived.
State that plainly rather than dressing it up. The branch has not moved in the eight months to 2026-09-30, and the newest tag is roughly eighteen months old. The news section on the page stops in February and March 2025 and hands back to a separate news document for anything earlier.
The consequence is that every pin discussed above was chosen against the ecosystem as it stood in early 2025, and the pins are exact. Adopting this today means adopting a snapshot: expect to resolve dependency conflicts yourself, and expect a transitive package in that list to have moved on. Pin v0.8.2 explicitly, run the resolution yourself before designing anything, and treat the Data Interpreter example as the most current documented entry point rather than assuming the CLI surface has evolved with the ecosystem.
The Docker image is a container you exec into, sized for a browser and a diagram renderer
The Dockerfile starts from a combined runtime, `nikolaik/python-nodejs:python3.9-nodejs20-slim`, so the image carries both a Python 3.9 and Node 20. It then installs libgomp1, git, chromium, libxss1 and a run of font packages, including fonts-ipafont-gothic, fonts-wqy-zenhei, fonts-thai-tlwg, fonts-kacst and fonts-freefont-ttf.
Those fonts and chromium are the tell. CJK and Thai font coverage exists so the browser-driven and diagram paths can render text, and the image sets `CHROME_BIN=/usr/bin/chromium`, points puppeteer at a config file inside the package, and sets PUPPETEER_SKIP_CHROMIUM_DOWNLOAD to true so the system chromium is used. It installs the mermaid CLI globally with npm, copies the source to /app/metagpt, creates a workspace directory, and installs requirements.txt with no cache before installing the package in editable mode.
The consequence is that this image is not a service. The command is `tail -f /dev/null` under sh, which is an infinite loop that does nothing, so the image exists to be exec'd into rather than run. It is also a large image for a tool whose core path is text generation, so reach for it when you need the browser or the renderer and not otherwise.
Editorial conclusion
Adopt MetaGPT if you want a fixed software-company procedure with the artefact set chosen for you, and not if you want to choose which documents your run produces, because Code = SOP(Team) decides the output shape before the model writes anything. Four things to check first. Your Python version, since the page asks for 3.9 or later but less than 3.12, which is a refusal rather than a warning on a newer interpreter. Whether you can supply node and pnpm, because pip install does not include them and the mermaid install step swallows its own failure. Whether your dependency set can absorb an exact-pinned list that already includes two vector databases and a browser automation stack. And how fresh you need it to be, since the last push was on 2026-01-21 and the newest release is v0.8.2 from 2025-03-09, so the pins reflect the ecosystem as it stood then. Pin the version and confirm the requirements resolve before you design around it.
Frequently asked questions
What does MetaGPT do?
It takes a one line requirement and outputs a set of artefacts: user stories, competitive analysis, requirements, data structures, APIs and documents. Internally it assigns roles including product managers, architects, project managers and engineers, and its stated core philosophy is Code = SOP(Team), meaning a materialised standard operating procedure is applied to a team of LLM agents.
How do you install MetaGPT?
The page asks for Python 3.9 or later but less than 3.12, suggests `conda create -n metagpt python=3.9 && conda activate metagpt`, and then `pip install --upgrade metagpt`. It also requires node and pnpm to be installed before actual use, and it offers separate guides for a stable version install and a Docker install. The pip step alone does not give you a runnable tool.
How do you use MetaGPT after installing it?
From the CLI, `metagpt "Create a 2048 game"` creates a repository under ./workspace. As a library you call `generate_repo` from `metagpt.software_company` and print the resulting `ProjectRepo` structure. A separate Data Interpreter class handles data work, taking a natural language instruction such as running an analysis on the sklearn Iris dataset with a plot.
Is MetaGPT open source?
The repository is MIT licensed, and the project page links the MIT licence. That covers the code in this repository. It is a separate question from the hosted product, since the page also announces MGX, MetaGPT X, as a natural language programming product launched on 2025-02-19, and the repository's declared homepage is atoms.dev rather than a page describing the project's own terms.
How does MetaGPT compare with AutoGen?
The project page makes no comparison against AutoGen, CrewAI, LangGraph or any other framework, and there is no benchmark or evaluation table anywhere in what it publishes. What you can read is its own design: a fixed role set with a materialised SOP, exact dependency pins, and use cases documented as Data Interpreter, Debate, Researcher and a receipt assistant.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/foundationagents-metagpt)