diff --git a/type_description_interfaces/CMakeLists.txt b/type_description_interfaces/CMakeLists.txt
index e860c778..b7101d60 100644
--- a/type_description_interfaces/CMakeLists.txt
+++ b/type_description_interfaces/CMakeLists.txt
@@ -20,6 +20,7 @@ rosidl_generate_interfaces(${PROJECT_NAME}
"msg/FieldType.msg"
"msg/IndividualTypeDescription.msg"
"msg/TypeDescription.msg"
+ "srv/GetTypeDescription.srv"
ADD_LINTER_TESTS
)
diff --git a/type_description_interfaces/package.xml b/type_description_interfaces/package.xml
index dd3fe970..731c3350 100644
--- a/type_description_interfaces/package.xml
+++ b/type_description_interfaces/package.xml
@@ -12,6 +12,7 @@
ament_cmake
rosidl_core_generators
+ service_msgs
rosidl_core_runtime
diff --git a/type_description_interfaces/srv/GetTypeDescription.srv b/type_description_interfaces/srv/GetTypeDescription.srv
new file mode 100644
index 00000000..6568852a
--- /dev/null
+++ b/type_description_interfaces/srv/GetTypeDescription.srv
@@ -0,0 +1,19 @@
+string type_name
+string type_version_hash
+---
+# True if the type description information is available and populated in the response
+bool successful
+# Empty if 'successful' was true, otherwise contains details on why it failed
+string failure_reason
+
+# The idl or msg file name
+string type_description_raw_file_name
+# The idl or msg file, with comments and whitespace
+# The file extension and/or the contents can be used to determine the format
+string type_description_raw
+# The parsed type description which can be used programmatically
+TypeDescription type_description
+
+# Key-value pairs of extra information.
+string[] extra_information_keys
+string[] extra_information_values