diff --git a/mapping_provider/__init__.py b/mapping_provider/__init__.py
index b71618451ed5806e10d1944861e055734ca84ea6..aa309f9cfa78136a8ef621a23d83e13d37b4dffa 100644
--- a/mapping_provider/__init__.py
+++ b/mapping_provider/__init__.py
@@ -1,10 +1,11 @@
 """Initializes the FastAPI application."""
-from xml.sax.handler import version
 
 from fastapi import FastAPI
+
 from mapping_provider.api.common import router as version_router
 
-def create_app():
+
+def create_app() -> FastAPI:
     """Create a FastAPI application."""
     app = FastAPI(
         title="Mapping provider",
diff --git a/mapping_provider/api/common.py b/mapping_provider/api/common.py
index f1395f2d77a509e02adf4a55c965cd14fec40d1a..9c528b0e71b78ccb6f8a8f607359a2013ff60c50 100644
--- a/mapping_provider/api/common.py
+++ b/mapping_provider/api/common.py
@@ -1,4 +1,4 @@
-from importlib.metadata import version, PackageNotFoundError
+from importlib.metadata import PackageNotFoundError, version
 
 from fastapi import APIRouter
 
@@ -6,7 +6,7 @@ router = APIRouter()
 
 
 @router.get("/version")
-def get_version():
+def get_version() -> dict[str, str]:
     """Get the version of the package."""
     try:
         return {"version": version("mapping_provider")}
diff --git a/pyproject.toml b/pyproject.toml
new file mode 100644
index 0000000000000000000000000000000000000000..cdeac565c37fdc9a4f47530c7a09f6413028ef66
--- /dev/null
+++ b/pyproject.toml
@@ -0,0 +1,12 @@
+[tool.ruff]
+line-length = 120
+target-version = "py313"
+select = ["E", "F", "I", "B", "UP", "N"]
+fixable = ["ALL"]
+exclude = ["tests", "docs", "build"]
+
+[tool.mypy]
+python_version = "3.13"
+strict = true
+warn_unused_ignores = true
+warn_return_any = true
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
index 590f2f4692f17f189bbf245ad6e8b2838f69caf3..010ed04932a9ec0cf586279112dc574665b1e89e 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,3 +1,6 @@
 fastapi
 uvicorn[standard]
-sphinx
\ No newline at end of file
+sphinx
+ruff
+mypy
+tox
\ No newline at end of file
diff --git a/setup.py b/setup.py
index 5a84dbf65238b60c9c29ced773c89c572fc5ffb4..5e5209c7d2b398fa6ee6b7e28f954dc397cc8133 100644
--- a/setup.py
+++ b/setup.py
@@ -1,4 +1,4 @@
-from setuptools import setup, find_packages
+from setuptools import find_packages, setup
 
 setup(
     name="mapping-provider",
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 0000000000000000000000000000000000000000..d9de39c584f993ab0851578349d9fdfe9d6cd44d
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,12 @@
+[tox]
+envlist = lint, typecheck
+
+[testenv:lint]
+description = Lint code with Ruff
+deps = ruff
+commands = ruff check mapping_provider
+
+[testenv:typecheck]
+description = Type-check code with mypy
+deps = mypy
+commands = mypy mapping_provider
\ No newline at end of file