diff --git a/cognee-mcp/README.md b/cognee-mcp/README.md
index fb439daca..7915d9519 100644
--- a/cognee-mcp/README.md
+++ b/cognee-mcp/README.md
@@ -84,6 +84,28 @@ Please refer to our documentation [here](https://docs.cognee.ai/how-to-guides/de
You can do more advanced configurations by creating .env file using our template.
To use different LLM providers / database configurations, and for more info check out our documentation.
+
+## 🐳 Docker Usage
+
+If you’d rather run cognee-mcp in a container, you have two options:
+
+1. **Build locally**
+ 1. Make sure you are in /cognee root directory and have a fresh `.env` containing only your `LLM_API_KEY` (and your chosen settings).
+ 2. Remove any old image and rebuild:
+ ```bash
+ docker rmi cognee/cognee-mcp:main || true
+ docker build --no-cache -f cognee-mcp/Dockerfile -t cognee/cognee-mcp:main .
+ ```
+ 3. Run it:
+ ```bash
+ docker run --env-file ./.env -p 8000:8000 --rm -it cognee/cognee-mcp:main
+ ```
+2. **Pull from Docker Hub** (no build required):
+ ```bash
+ # With your .env file
+ docker run --env-file ./.env -p 8000:8000 --rm -it cognee/cognee-mcp:main
+
+
## 💻 Basic Usage
The MCP server exposes its functionality through tools. Call them from any MCP client (Cursor, Claude Desktop, Cline, Roo and more).
diff --git a/poetry.lock b/poetry.lock
index 2749fea4d..74125fe7c 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -3639,6 +3639,19 @@ files = [
[package.dependencies]
pygments = "*"
+[[package]]
+name = "isodate"
+version = "0.7.2"
+description = "An ISO 8601 date/time/duration parser and formatter"
+optional = false
+python-versions = ">=3.7"
+groups = ["main"]
+markers = "python_version == \"3.10\""
+files = [
+ {file = "isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15"},
+ {file = "isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6"},
+]
+
[[package]]
name = "isoduration"
version = "20.11.0"
@@ -6772,20 +6785,6 @@ files = [
{file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"},
]
-[[package]]
-name = "owlready2"
-version = "0.47"
-description = "A package for ontology-oriented programming in Python: load OWL 2.0 ontologies as Python objects, modify them, save them, and perform reasoning via HermiT. Includes an optimized RDF quadstore."
-optional = false
-python-versions = ">=3.6"
-groups = ["main"]
-files = [
- {file = "owlready2-0.47.tar.gz", hash = "sha256:af7e1d2205c0b5886d2e34397ab8c10ca29ff68c3dc3702d43393966ac7f6eb0"},
-]
-
-[package.extras]
-test = ["flask", "gevent", "rdflib"]
-
[[package]]
name = "packaging"
version = "24.2"
@@ -9028,6 +9027,29 @@ files = [
[package.extras]
all = ["numpy"]
+[[package]]
+name = "rdflib"
+version = "7.1.4"
+description = "RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information."
+optional = false
+python-versions = "<4.0.0,>=3.8.1"
+groups = ["main"]
+files = [
+ {file = "rdflib-7.1.4-py3-none-any.whl", hash = "sha256:72f4adb1990fa5241abd22ddaf36d7cafa5d91d9ff2ba13f3086d339b213d997"},
+ {file = "rdflib-7.1.4.tar.gz", hash = "sha256:fed46e24f26a788e2ab8e445f7077f00edcf95abb73bcef4b86cefa8b62dd174"},
+]
+
+[package.dependencies]
+isodate = {version = ">=0.7.2,<1.0.0", markers = "python_version < \"3.11\""}
+pyparsing = ">=2.1.0,<4"
+
+[package.extras]
+berkeleydb = ["berkeleydb (>=18.1.0,<19.0.0)"]
+html = ["html5rdf (>=1.2,<2)"]
+lxml = ["lxml (>=4.3,<6.0)"]
+networkx = ["networkx (>=2,<4)"]
+orjson = ["orjson (>=3.9.14,<4)"]
+
[[package]]
name = "readme-renderer"
version = "44.0"
@@ -12054,4 +12076,4 @@ weaviate = ["weaviate-client"]
[metadata]
lock-version = "2.1"
python-versions = ">=3.10,<=3.13"
-content-hash = "82a7882547792db8aa953fcb4604ea2b5430e579376d7909de25234cccc6622f"
+content-hash = "c33c4bc9654072b74c2f768c6d4bf9da7b1a814b50046539fceb78a5541d30ee"
diff --git a/pyproject.toml b/pyproject.toml
index 8319b9dc2..bb0459bb0 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -39,7 +39,7 @@ dependencies = [
"filetype>=1.2.0",
"aiohttp>=3.11.14",
"aiofiles>=23.2.1",
- "owlready2>=0.47,<0.48",
+ "rdflib>=7.1.4,<7.2.0",
"graphistry>=0.33.5,<0.34",
"pypdf>=4.1.0,<6.0.0",
"jinja2>=3.1.3,<4",
diff --git a/uv.lock b/uv.lock
index 60ed1fa50..538ae8003 100644
--- a/uv.lock
+++ b/uv.lock
@@ -895,7 +895,6 @@ dependencies = [
{ name = "numpy", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
{ name = "onnxruntime" },
{ name = "openai" },
- { name = "owlready2" },
{ name = "pandas" },
{ name = "pre-commit" },
{ name = "pydantic" },
@@ -904,6 +903,7 @@ dependencies = [
{ name = "pypdf" },
{ name = "python-dotenv" },
{ name = "python-multipart" },
+ { name = "rdflib" },
{ name = "s3fs", extra = ["boto3"] },
{ name = "scikit-learn" },
{ name = "sentry-sdk", extra = ["fastapi"] },
@@ -1077,7 +1077,6 @@ requires-dist = [
{ name = "numpy", specifier = ">=1.26.4,<=2.1" },
{ name = "onnxruntime", specifier = "<=1.21.1" },
{ name = "openai", specifier = ">=1.59.4,<2" },
- { name = "owlready2", specifier = ">=0.47,<0.48" },
{ name = "pandas", specifier = ">=2.2.2" },
{ name = "pgvector", marker = "extra == 'postgres'", specifier = ">=0.3.5,<0.4" },
{ name = "pgvector", marker = "extra == 'postgres-binary'", specifier = ">=0.3.5,<0.4" },
@@ -1102,6 +1101,7 @@ requires-dist = [
{ name = "python-multipart", specifier = "==0.0.20" },
{ name = "qasync", marker = "extra == 'gui'", specifier = ">=0.27.1,<0.28" },
{ name = "qdrant-client", marker = "extra == 'qdrant'", specifier = ">=1.14.2,<2" },
+ { name = "rdflib", specifier = ">=7.1.4,<7.2.0" },
{ name = "ruff", marker = "extra == 'dev'", specifier = ">=0.9.2,<1.0.0" },
{ name = "s3fs", extras = ["boto3"], specifier = "==2025.3.2" },
{ name = "s3fs", extras = ["boto3"], marker = "extra == 'aws'", specifier = "==2025.3.2" },
@@ -2786,6 +2786,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" },
]
+[[package]]
+name = "isodate"
+version = "0.7.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705, upload-time = "2024-10-08T23:04:11.5Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload-time = "2024-10-08T23:04:09.501Z" },
+]
+
[[package]]
name = "isoduration"
version = "20.11.0"
@@ -5070,12 +5079,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49", size = 17832, upload-time = "2024-01-27T21:01:31.393Z" },
]
-[[package]]
-name = "owlready2"
-version = "0.47"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/6a/8b/6f0534ff7285e8d97e36a3838f88ffc8deb7cd0bc7b34f9f97d8bfdaae90/owlready2-0.47.tar.gz", hash = "sha256:af7e1d2205c0b5886d2e34397ab8c10ca29ff68c3dc3702d43393966ac7f6eb0", size = 27271190, upload-time = "2024-10-07T11:55:45.673Z" }
-
[[package]]
name = "packaging"
version = "24.2"
@@ -6618,6 +6621,19 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/c1/c5/c243b05a15a27b946180db0d1e4c999bef3f4221505dff9748f1f6c917be/rapidfuzz-3.13.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:1f219f1e3c3194d7a7de222f54450ce12bc907862ff9a8962d83061c1f923c86", size = 1553782, upload-time = "2025-04-03T20:38:30.778Z" },
]
+[[package]]
+name = "rdflib"
+version = "7.1.4"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "isodate", marker = "python_full_version < '3.11'" },
+ { name = "pyparsing" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/e8/7e/cb2d74466bd8495051ebe2d241b1cb1d4acf9740d481126aef19ef2697f5/rdflib-7.1.4.tar.gz", hash = "sha256:fed46e24f26a788e2ab8e445f7077f00edcf95abb73bcef4b86cefa8b62dd174", size = 4692745, upload-time = "2025-03-29T02:23:02.386Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/31/e9b6f04288dcd3fa60cb3179260d6dad81b92aef3063d679ac7d80a827ea/rdflib-7.1.4-py3-none-any.whl", hash = "sha256:72f4adb1990fa5241abd22ddaf36d7cafa5d91d9ff2ba13f3086d339b213d997", size = 565051, upload-time = "2025-03-29T02:22:44.987Z" },
+]
+
[[package]]
name = "readme-renderer"
version = "44.0"