diff --git a/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb b/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb
index 6eb0f29d438..6408cf96c14 100644
--- a/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb
+++ b/lib/datadog/tracing/contrib/grpc/datadog_interceptor/server.rb
@@ -59,6 +59,8 @@ def annotate!(span, metadata)
                 span.set_tag(header, value)
               end
 
+              span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_SERVER)
+
               span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
               span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_SERVICE)
 
diff --git a/lib/datadog/tracing/contrib/mongodb/subscribers.rb b/lib/datadog/tracing/contrib/mongodb/subscribers.rb
index 1d87796c2dd..cce070e7e05 100644
--- a/lib/datadog/tracing/contrib/mongodb/subscribers.rb
+++ b/lib/datadog/tracing/contrib/mongodb/subscribers.rb
@@ -33,6 +33,8 @@ def started(event)
 
             span.set_tag(Contrib::Ext::DB::TAG_SYSTEM, Ext::TAG_SYSTEM)
 
+            span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_CLIENT)
+
             span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
             span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_COMMAND)
 
diff --git a/lib/datadog/tracing/contrib/rack/middlewares.rb b/lib/datadog/tracing/contrib/rack/middlewares.rb
index 75957de1006..889d9ed07eb 100644
--- a/lib/datadog/tracing/contrib/rack/middlewares.rb
+++ b/lib/datadog/tracing/contrib/rack/middlewares.rb
@@ -45,6 +45,7 @@ def compute_queue_time(env)
             # Tag this span as belonging to Rack
             frontend_span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
             frontend_span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_HTTP_SERVER_QUEUE)
+            frontend_span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_SERVER)
 
             # Set peer service (so its not believed to belong to this app)
             frontend_span.set_tag(Tracing::Metadata::Ext::TAG_PEER_SERVICE, configuration[:web_service_name])
@@ -157,6 +158,7 @@ def set_request_tags!(trace, request_span, env, status, headers, response, origi
 
             request_span.set_tag(Tracing::Metadata::Ext::TAG_COMPONENT, Ext::TAG_COMPONENT)
             request_span.set_tag(Tracing::Metadata::Ext::TAG_OPERATION, Ext::TAG_OPERATION_REQUEST)
+            request_span.set_tag(Tracing::Metadata::Ext::TAG_KIND, Tracing::Metadata::Ext::SpanKind::TAG_SERVER)
 
             # Set analytics sample rate
             if Contrib::Analytics.enabled?(configuration[:analytics_enabled])
diff --git a/spec/datadog/tracing/contrib/grpc/datadog_interceptor/server_spec.rb b/spec/datadog/tracing/contrib/grpc/datadog_interceptor/server_spec.rb
index 17620314e47..dcaf7a60622 100644
--- a/spec/datadog/tracing/contrib/grpc/datadog_interceptor/server_spec.rb
+++ b/spec/datadog/tracing/contrib/grpc/datadog_interceptor/server_spec.rb
@@ -35,6 +35,7 @@
     it { expect(span.get_tag('rpc.system')).to eq 'grpc' }
     it { expect(span.get_tag('rpc.service')).to eq 'My::Server' }
     it { expect(span.get_tag('rpc.method')).to eq 'endpoint' }
+    it { expect(span.get_tag('span.kind')).to eq('server') }
 
     it 'has component and operation tags' do
       expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('grpc')
@@ -80,6 +81,7 @@
           expect(span).to have_error_type('TestError')
           expect(span).to have_error_stack(include('server_spec.rb'))
           expect(span.get_tag('rpc.system')).to eq 'grpc'
+          expect(span.get_tag('span.kind')).to eq('server')
         end
       end
 
@@ -97,6 +99,7 @@
           expect(span).to_not have_error
           expect(span.get_tag('custom.handler')).to eq('Got error test error, but ignored it')
           expect(span.get_tag('rpc.system')).to eq('grpc')
+          expect(span.get_tag('span.kind')).to eq('server')
         end
       end
     end
diff --git a/spec/datadog/tracing/contrib/mongodb/client_spec.rb b/spec/datadog/tracing/contrib/mongodb/client_spec.rb
index 3d8ae1bdfe3..be9b5bb3d65 100644
--- a/spec/datadog/tracing/contrib/mongodb/client_spec.rb
+++ b/spec/datadog/tracing/contrib/mongodb/client_spec.rb
@@ -154,6 +154,7 @@
         expect(span.get_tag('out.port')).to eq(port)
         expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('mongodb')
         expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)).to eq('command')
+        expect(span.get_tag('span.kind')).to eq('client')
       end
 
       it_behaves_like 'analytics for integration' do
diff --git a/spec/datadog/tracing/contrib/rack/integration_test_spec.rb b/spec/datadog/tracing/contrib/rack/integration_test_spec.rb
index d62c0b3b293..f2fab1b6072 100644
--- a/spec/datadog/tracing/contrib/rack/integration_test_spec.rb
+++ b/spec/datadog/tracing/contrib/rack/integration_test_spec.rb
@@ -31,6 +31,7 @@
       expect(span.status).to eq(0)
       expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('rack')
       expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)).to eq('request')
+      expect(span.get_tag('span.kind')).to eq('server')
     end
   end
 
@@ -77,6 +78,8 @@
             .to eq('rack')
           expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION))
             .to eq('request')
+          expect(span.get_tag('span.kind'))
+            .to eq('server')
         end
       end
     end
@@ -286,6 +289,8 @@
               .to eq('rack')
             expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION))
               .to eq('request')
+            expect(span.get_tag('span.kind'))
+              .to eq('server')
           end
         end
       end
@@ -322,6 +327,8 @@
           expect(web_server_span.get_tag('operation')).to eq('queue')
           expect(web_server_span.get_tag('peer.service')).to eq('web-server')
           expect(web_server_span.status).to eq(0)
+          expect(web_server_span.get_tag('span.kind'))
+            .to eq('server')
 
           expect(rack_span.span_type).to eq('web')
           expect(rack_span.service).to eq(tracer.default_service)
@@ -331,6 +338,8 @@
           expect(rack_span.status).to eq(0)
           expect(rack_span.get_tag('component')).to eq('rack')
           expect(rack_span.get_tag('operation')).to eq('request')
+          expect(rack_span.get_tag('span.kind'))
+            .to eq('server')
         end
       end
     end
@@ -367,6 +376,8 @@
             .to eq('rack')
           expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION))
             .to eq('request')
+          expect(span.get_tag('span.kind'))
+            .to eq('server')
         end
       end
     end
@@ -404,6 +415,8 @@
             .to eq('rack')
           expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION))
             .to eq('request')
+          expect(span.get_tag('span.kind'))
+            .to eq('server')
         end
       end
     end
@@ -444,6 +457,8 @@
               .to eq('rack')
             expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION))
               .to eq('request')
+            expect(span.get_tag('span.kind'))
+              .to eq('server')
           end
         end
       end
@@ -483,6 +498,8 @@
               .to eq('rack')
             expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION))
               .to eq('request')
+            expect(span.get_tag('span.kind'))
+              .to eq('server')
           end
         end
       end
@@ -538,6 +555,8 @@
                 .to eq('rack')
               expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION))
                 .to eq('request')
+              expect(span.get_tag('span.kind'))
+                .to eq('server')
             end
           end
         end
@@ -582,6 +601,7 @@
           expect(web_server_span.get_tag('operation')).to eq('queue')
           expect(web_server_span.get_tag('peer.service')).to eq('web-server')
           expect(web_server_span.status).to eq(0)
+          expect(web_server_span.get_tag('span.kind')).to eq('server')
 
           expect(rack_span.span_type).to eq('web')
           expect(rack_span.service).to eq(tracer.default_service)
@@ -591,6 +611,7 @@
           expect(rack_span.status).to eq(0)
           expect(rack_span.get_tag('component')).to eq('rack')
           expect(rack_span.get_tag('operation')).to eq('request')
+          expect(rack_span.get_tag('span.kind')).to eq('server')
 
           expect(nested_app_span.resource).to eq('UserController#show')
         end
@@ -640,6 +661,8 @@
                 .to eq('rack')
               expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION))
                 .to eq('request')
+              expect(span.get_tag('span.kind'))
+                .to eq('server')
             end
           end
         end
@@ -681,6 +704,8 @@
                 .to eq('rack')
               expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION))
                 .to eq('request')
+              expect(span.get_tag('span.kind'))
+                .to eq('server')
             end
           end
         end
@@ -891,6 +916,7 @@
         expect(span.status).to eq(0)
         expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_COMPONENT)).to eq('rack')
         expect(span.get_tag(Datadog::Tracing::Metadata::Ext::TAG_OPERATION)).to eq('request')
+        expect(span.get_tag('span.kind')).to eq('server')
       end
     end
   end