diff --git a/mage/query-modules/cpp/schema.md b/mage/query-modules/cpp/schema.md
new file mode 100644
index 00000000000..695809921c3
--- /dev/null
+++ b/mage/query-modules/cpp/schema.md
@@ -0,0 +1,114 @@
+---
+id: schema
+title: schema
+sidebar_label: schema
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import RunOnSubgraph from '../../templates/_run_on_subgraph.mdx';
+
+export const Highlight = ({children, color}) => (
+
+{children}
+
+);
+
+
+The `schema` module offers procedures that allow you to interact with and retrieve information about the database schema.
+
+[](https://github.com/memgraph/mage/tree/main/cpp/schema_module)
+
+| Trait | Value |
+| ------------------- | ----------------------------------------------------- |
+| **Module type** | **util** |
+| **Implementation** | **C++** |
+| **Parallelism** | **sequential** |
+
+### Procedures
+
+### `node_type_properties()`
+
+This procedure returns schema information about nodes and their properties in the graph. For every property in a node, a separate row is created.
+
+#### Output:
+
+- `labels: List[string]` ➡ a list of node labels.
+- `mandatory: boolean` ➡ a boolean which is `True` if the node has properties, `False` if the node has no properties.
+- `property_name: string` ➡ property name.
+- `property_type: string` ➡ property type.
+
+#### Usage:
+
+Cypher query used to create the graph used to showcase the procedure:
+
+```cypher
+CREATE (d:Dog {name: "Rex", age: 5})-[l:LOVES {how_much: "very"}]->(h:Human:Owner {name: "Carl", age: 90});
+CREATE (n:NonManadatoryNode);
+```
+Cypher usage of the procedure:
+
+```cypher
+CALL schema.rel_type_properties() YIELD mandatory, property_name, property_type, rel_type RETURN mandatory, property_name, property_type, rel_type;
+```
+
+```plaintext
++-------------------------------------------------------------------+
+| labels | mandatory | property_name | property_type |
++-------------------------------------------------------------------+
+| ["Dog"] | true | age | Int |
++-------------------------------------------------------------------+
+| ["Dog"] | true | name | String |
++-------------------------------------------------------------------+
+| ["Human", "Owner"] | true | age | Int |
++-------------------------------------------------------------------+
+| ["Human", "Owner"] | true | name | String |
++-------------------------------------------------------------------+
+| ["NonManadatoryNode"] | false | | |
++-------------------------------------------------------------------+
+```
+
+
+### `rel_type_properties()`
+
+Returns schema information about relationships and their properties in the graph. For every property in a relationship, a separate row is created.
+
+#### Output:
+
+- `rel_type: string` ➡ relationship type.
+- `mandatory: boolean` ➡ a boolean which is `True` if the node has properties, `False` if the node has no properties.
+- `property_name: string` ➡ property name.
+- `property_type: string` ➡ property type.
+
+#### Usage:
+
+Cypher query used to create the graph used to showcase the procedure:
+
+```cypher
+CREATE (d:Dog)-[r:RUNS_AND_PLAYS_IN {speed: 100, duration: "5 hours" }]->(p:Park);
+CREATE (b:Bird)-[f:FLIES_TO]->(s:Sky);
+```
+Cypher usage of the procedure:
+
+```cypher
+CALL schema.rel_type_properties() YIELD rel_type, mandatory, property_name, property_type RETURN rel_type, mandatory, property_name, property_type;
+```
+
+```plaintext
++-------------------------------------------------------------------+
+| labels | mandatory | property_name | property_type |
++-------------------------------------------------------------------+
+| RUNS_AND_PLAYS_IN | true | duration | String |
++-------------------------------------------------------------------+
+| RUNS_AND_PLAYS_IN | true | speed | Int |
++-------------------------------------------------------------------+
+| FLIES_TO | false | | |
++-------------------------------------------------------------------+
+
+```
diff --git a/mage/templates/_mage_spells.mdx b/mage/templates/_mage_spells.mdx
index d0b89999366..e19d98b2011 100644
--- a/mage/templates/_mage_spells.mdx
+++ b/mage/templates/_mage_spells.mdx
@@ -66,6 +66,7 @@
| [migrate](/mage/query-modules/python/migrate) | Python | A module that can access data from a MySQL, SQL Server or Oracle database. |
| [periodic](/mage/query-modules/cpp/periodic) | C++ | A module containing procedures for periodically running difficult and/or memory/time consuming queries. |
| rust_example | Rust | Example of a basic module with input parameters forwarding, made in Rust. |
+| [schema](/mage/query-modules/cpp/schema) | C++ | A module which offers procedures that allow you to interact with and retrieve information about the database schema. |
| [uuid_generator](/mage/query-modules/cpp/uuid-generator) | C++ | A module that generates a new universally unique identifier (UUID). |
diff --git a/sidebars/sidebarsMAGE.js b/sidebars/sidebarsMAGE.js
index 229d7e59b8b..a37162c5668 100644
--- a/sidebars/sidebarsMAGE.js
+++ b/sidebars/sidebarsMAGE.js
@@ -63,6 +63,7 @@ module.exports = {
"query-modules/cpp/pagerank",
"query-modules/cpp/pagerank-online",
"query-modules/cpp/periodic",
+ "query-modules/cpp/schema",
"query-modules/python/set-cover",
"query-modules/python/temporal",
"query-modules/python/temporal-graph-networks",