diff --git a/tools/templates/interface.mako.server.hpp b/tools/templates/interface.mako.server.hpp
new file mode 100644
index 0000000..ff18548
--- /dev/null
+++ b/tools/templates/interface.mako.server.hpp
@@ -0,0 +1,37 @@
+#pragma once
+#include <tuple>
+#include <systemd/sd-bus.h>
+#include <sdbusplus/vtable.hpp>
+    <%
+        namespaces = interface.name.split('.')
+        classname = namespaces.pop()
+    %>
+namespace sdbusplus
+{
+namespace server
+{
+    % for s in namespaces:
+namespace ${s}
+{
+    % endfor
+
+class ${classname}
+{
+    public:
+    % for m in interface.methods:
+${ m.cpp_prototype(loader, interface=interface, ptype='header') }
+    % endfor
+
+    private:
+    % for m in interface.methods:
+${ m.cpp_prototype(loader, interface=interface, ptype='callback-header') }
+    % endfor
+
+        static const sdbusplus::vtable::vtable_t _vtable[];
+};
+
+    % for s in namespaces:
+} // namespace ${s}
+    % endfor
+} // namespace server
+} // namespace sdbusplus
diff --git a/tools/templates/method.mako.prototype.hpp b/tools/templates/method.mako.prototype.hpp
new file mode 100644
index 0000000..5055dbb
--- /dev/null
+++ b/tools/templates/method.mako.prototype.hpp
@@ -0,0 +1,57 @@
+<%
+    def cpp_return_type():
+        if len(method.returns) == 0:
+            return "void"
+        elif len(method.returns) == 1:
+            return method.returns[0].typeName
+        else:
+            return "std::tuple<" + \
+                   ", ".join([ r.typeName for r in method.returns ]) + \
+                   ">"
+
+    def parameters(defaultValue=False):
+        return ",\n            ".\
+            join([ parameter(p, defaultValue) for p in method.parameters ])
+
+    def parameter(p, defaultValue=False):
+        r = "%s %s" % (p.typeName, p.name)
+        if defaultValue:
+            r += default_value(p)
+        return r
+
+    def default_value(p):
+        if p.defaultValue != None:
+            return " = " + str(p.defaultValue)
+        else:
+            return ""
+%>
+###
+### Emit 'header'
+###
+    % if ptype == 'header':
+        /** @brief Implementation for ${ method.name }
+         *  ${ method.description.strip() }
+    % if len(method.parameters) != 0:
+         *
+        % for p in method.parameters:
+         *  @param[in] ${p.name} - ${p.description.strip()}
+        % endfor
+    % endif
+    % if len(method.returns) != 0:
+         *
+        % for r in method.returns:
+         *  @return ${r.name}[${r.typeName}] - ${r.description.strip()}
+        % endfor
+    % endif
+         */
+        virtual ${cpp_return_type()} ${ method.name }(
+            ${ parameters() }) = 0;
+###
+### Emit 'callback-header'
+###
+    % elif ptype == 'callback-header':
+        /** @brief sd-bus callback for ${ method.name }
+         */
+        static int _callback_${ method.name }(
+            sd_bus_message*, void*, sd_bus_error*);
+    % endif
