diff --git a/include/dap_chain_plugins_list.h b/include/dap_chain_plugins_list.h
new file mode 100644
index 0000000000000000000000000000000000000000..7d5336af1c80f6f9011ecb2819d271219a53da8e
--- /dev/null
+++ b/include/dap_chain_plugins_list.h
@@ -0,0 +1,49 @@
+#ifndef _DAP_CHAIN_PLUGINS_LIST_
+#define _DAP_CHAIN_PLUGINS_LIST_
+
+#include "Python.h"
+#include "stdbool.h"
+#include "dap_list.h"
+#include "dap_common.h"
+#include "dap_strfuncs.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#undef LOG_TAG
+#define LOG_TAG "dap_chain_plugins_list"
+
+typedef struct dap_chain_plugin_module{
+    char *name;
+    PyObject *obj_module;
+    bool isFuncOnChainsUpdated;
+    bool isFuncOnGdbUpdated;
+    bool isFuncOnNetStatusChanged;
+}dap_chain_plugins_module_t;
+
+static dap_list_t* dap_chain_plugins_module_list;
+
+int dap_chain_plugins_list_init();
+void dap_chain_plugins_list_deint();
+
+void dap_chain_plugins_list_add(PyObject *module, const char *name);
+
+unsigned int dap_chain_plugins_list_lenght();
+
+dap_chain_plugins_module_t *dap_chain_plugins_list_get_module(unsigned int id);
+PyObject *dap_chain_plugins_list_get_object(unsigned int id);
+
+bool dap_chai_plugins_list_module_check_on_chains_updated(unsigned int id);
+bool dap_chai_plugins_list_module_check_on_gdb_updated(unsigned int id);
+bool dap_chai_plugins_list_module_check_on_net_status_updated(unsigned int id);
+
+bool dap_chain_plugins_list_module_del(dap_chain_plugins_module_t *module);
+bool dap_chain_plugins_list_id_del(unsigned int id_module);
+bool dap_chain_plugins_list_name_del(const char *name_module);
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#endif // _DAP_CHAIN_PLUGINS_LIST_
diff --git a/src/dap_chain_plugins_list.c b/src/dap_chain_plugins_list.c
new file mode 100644
index 0000000000000000000000000000000000000000..224a170d15e5969bcfc772ddf6ca8ef77dba58bb
--- /dev/null
+++ b/src/dap_chain_plugins_list.c
@@ -0,0 +1,109 @@
+#include "dap_chain_plugins_list.h"
+
+int dap_chain_plugins_list_init(){
+    dap_chain_plugins_module_list = dap_list_alloc();
+}
+void dap_chain_plugins_list_deint(){
+    unsigned int len = dap_chain_plugins_list_lenght();
+    if (len > 0){
+        for (unsigned int i=0; i < len; i++){
+            dap_chain_plugins_list_id_del(i);
+        }
+    }
+    dap_list_free(dap_chain_plugins_module_list);
+}
+
+void dap_chain_plugins_list_add(PyObject *module, const char *name){
+    dap_chain_plugins_module_t *module_s = (dap_chain_plugins_module_t*)malloc(sizeof (dap_chain_plugins_module_t));
+    module_s->name = dap_strdup(name);
+    module_s->obj_module = module;
+    module_s->isFuncOnGdbUpdated = true;
+    module_s->isFuncOnChainsUpdated = true;
+    module_s->isFuncOnNetStatusChanged = true;
+    //Checking func
+    PyObject *F_FuncOnGdbUpdated = PyObject_GetAttrString(module_s->obj_module, "onGdbUpdated");
+    PyObject *F_FuncOnChainsUpdated = PyObject_GetAttrString(module_s->obj_module, "onChainsUpdated");
+    PyObject *F_FuncOnNetStatusChanged = PyObject_GetAttrString(module_s->obj_module, "onNetStatusChanged");
+    if (F_FuncOnGdbUpdated == NULL || !PyCallable_Check(F_FuncOnGdbUpdated)){
+        log_it(L_WARNING, "Plugin %s don't callable function onGdbUpdated", module_s->name);
+        module_s->isFuncOnGdbUpdated = false;
+    }
+    if (F_FuncOnChainsUpdated == NULL || !PyCallable_Check(F_FuncOnChainsUpdated)){
+        log_it(L_WARNING, "Plugin %s don't callable function onChainsUpdated", module_s->name);
+        module_s->isFuncOnChainsUpdated = false;
+    }
+    if (F_FuncOnNetStatusChanged == NULL || !PyCallable_Check(F_FuncOnNetStatusChanged)){
+        log_it(L_WARNING, "Plugin %s don't callable function onNetStatusChanged", module_s->name);
+        module_s->isFuncOnNetStatusChanged = false;
+    }
+    //Added structur to list
+    dap_list_append(dap_chain_plugins_module_list, module_s);
+}
+
+unsigned int dap_chain_plugins_list_lenght(){
+    return dap_list_length(dap_chain_plugins_module_list);
+}
+
+dap_chain_plugins_module_t *dap_chain_plugins_list_get_module(unsigned int id){
+    if (dap_chain_plugins_list_lenght() < id)
+        return NULL;
+    return (dap_chain_plugins_module_t*)dap_list_nth_data(dap_chain_plugins_module_list, id);
+}
+PyObject *dap_chain_plugins_list_get_object(unsigned int id){
+    if (dap_chain_plugins_list_lenght() < id)
+        return NULL;
+    return (dap_chain_plugins_list_get_module(id))->obj_module;
+}
+
+bool dap_chai_plugins_list_module_check_on_chains_updated(unsigned int id){
+    if (dap_chain_plugins_list_lenght() < id)
+        return NULL;
+    dap_chain_plugins_module_t *module = (dap_chain_plugins_module_t*)dap_list_nth_data(
+                dap_chain_plugins_module_list, id
+                );
+    return module->isFuncOnChainsUpdated;
+}
+bool dap_chai_plugins_list_module_check_on_gdb_updated(unsigned int id){
+    if (dap_chain_plugins_list_lenght() < id)
+        return NULL;
+    dap_chain_plugins_module_t *module = (dap_chain_plugins_module_t*)dap_list_nth_data(
+                dap_chain_plugins_module_list, id
+                );
+    return module->isFuncOnGdbUpdated;
+}
+bool dap_chai_plugins_list_module_check_on_net_status_updated(unsigned int id){
+    if (dap_chain_plugins_list_lenght() < id)
+        return NULL;
+    dap_chain_plugins_module_t *module = (dap_chain_plugins_module_t*)dap_list_nth_data(
+                dap_chain_plugins_module_list, id
+                );
+    return module->isFuncOnNetStatusChanged;
+}
+
+bool dap_chain_plugins_list_module_del(dap_chain_plugins_module_t *module){
+    for (unsigned int i=0; i < dap_chain_plugins_list_lenght(); i++){
+        if (((dap_chain_plugins_module_t*)dap_list_nth_data(dap_chain_plugins_module_list, i)) == module){
+            dap_chain_plugins_list_id_del(i);
+            return true;
+        }
+    }
+    return false;
+}
+bool dap_chain_plugins_list_id_del(unsigned int id_module){
+    if (dap_chain_plugins_list_lenght() < id_module)
+        return false;
+    dap_chain_plugins_module_t *mod = (dap_chain_plugins_module_t*)dap_list_nth_data(dap_chain_plugins_module_list, id_module);
+    Py_XDECREF(mod->obj_module);
+    free(mod->name);
+    dap_list_remove(dap_chain_plugins_module_list, dap_list_nth_data(dap_chain_plugins_module_list, id_module));
+    return true;
+}
+bool dap_chain_plugins_list_name_del(const char *name_module){
+    for (unsigned int i=0; i < dap_chain_plugins_list_lenght(); i++){
+        if (strcmp(((dap_chain_plugins_module_t*)dap_list_nth_data(dap_chain_plugins_module_list, i))->name, name_module) == 0){
+            dap_chain_plugins_list_id_del(i);
+            return true;
+        }
+    }
+    return false;
+}